![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Рейкин |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 198 Регистрация: 23.11.2003 Где: Баку, Азербайджан Репутация: 1 Всего: 1 |
Здравствуйте,
Надеюсь поможете добрым советом Создаю базу (таблицу в MySQL) c IP-адресами. Если IP новый, то записывается. Если такой уже есть, то не записывает. Раз в сутки таблица опустошается и всё сначала. Вопрос: как организовать алгоритм, чтобы не очень тормозил? В идеале IP-шек может быть до 12000 (географический таргетинг) Спасибо. |
|||
|
||||
| Dave |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 190 Регистрация: 17.6.2004 Репутация: -1 Всего: 1 |
а нынешний алгоритм сильно тормозит ?
У тебя айпишники приходят раз в сутки все в месте или постепенно ? |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: нет Всего: 51 |
обычно ip адреса хранят в виде long integer.
|
|||
|
||||
| Bi0 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 24.11.2005 Репутация: нет Всего: нет |
а как же точки ? |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Переводим IP в число и не паримся |
|||
|
||||
| Рейкин |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 198 Регистрация: 23.11.2003 Где: Баку, Азербайджан Репутация: 1 Всего: 1 |
Счас гляну что такое - похоже на классную вещь
Я сначала за советом - ещё не писАл. Будут приходить не сразу, не скопом. А как хранить в базе? Построчно? ID IP 1 1.1.1.1 2. 1.3.4.2 ........ Или есть более быстрый способ для последующего чтения и сравнения? Спасибо Это сообщение отредактировал(а) Рейкин - 20.12.2005, 22:54 |
||||
|
|||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
При чем тут построчно?
Хранить как число. |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
Если честно, не понял как числом хранить... Допустим есть адреса 195.122.193.5 и 195.122.19.35. Ну и как определить тогда какой из них какой если число получится 1951221935? -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Рейкин |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 198 Регистрация: 23.11.2003 Где: Баку, Азербайджан Репутация: 1 Всего: 1 |
Я имею ввиду - как хранить в базе как число? Добавлять каждый раз строку в таблицу, задавая каждому числу два поля: само число и его ID. ID для того, чтобы перечитывать от и до при сравнении, конечно.
Кажись там вообще не в такой. Пример: ip2long("125.125.125.125") = 2105376125 А бывает вообще отрицательный (для других IP, конечно)... Это сообщение отредактировал(а) Рейкин - 21.12.2005, 09:47 |
||||
|
|||||
| Хоббит |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: 1 Всего: 1 |
.... да .. наверно люди сильно не знают информатику. .... есть такое понятие системы счисления .... вот ip адресс можно сказать записан в 255 ричной системе счисления .. а тебе надо перевести в 10 (нашу) систему. Сделать это можно так
ip = a.b.c.d = a * 255^3 + b * 255^2 + с * 255 + d // где ^ степень. Обратный алгоритм примерно идиентичный, только надо будет делить на 255 и брать остатки. ( в принципе тебе это нафик не надо, т.к. есть стандартные функции перевода. P.S. Отрицательные числа появляются из-за формата записи отрицательных чисел, т.к. для как в битном представлении у целых чисел 1 бит означает знак 0 плюс 1 минус, остальные означают число (причем у отрицательных чисел еще все биты инвертированы) Но это тоже не надо. На счет хранения посторочно ??? .. не понятно ... просто для каждого IP новая строка в БД и все! |
|||
|
||||
| Рейкин |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 198 Регистрация: 23.11.2003 Где: Баку, Азербайджан Репутация: 1 Всего: 1 |
Хоббит - оппа, всё ясно объяснил, спасибо. Насчёт хранения - это и говорю.
Вопрос. Раз в сутки хочу стирать базу IP, начиная с нуля. Собираюсь просто удалять таблицу и создавать её заново. Это корректный подход? |
|||
|
||||
| R.M. |
|
|||
![]() Анархист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2164 Регистрация: 8.6.2005 Где: Питер Репутация: -2 Всего: 30 |
Рейкин
Нет, можно её отчищать, непомню команду мускула, загляни в phpmyadmin или в учебник -------------------- Помнишь как бодрили дискотеки прошлого века? Теперь стул, компьютер и нету человека. Nokia LifeStyle - Всё для смартфонов Nokia |
|||
|
||||
| mr.fox |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 298 Регистрация: 13.3.2005 Где: Ирландия Репутация: -1 Всего: 2 |
Рейкин truncate `table`
|
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
а случайно не так?
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| R.M. |
|
|||
![]() Анархист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2164 Регистрация: 8.6.2005 Где: Питер Репутация: -2 Всего: 30 |
Red Dragon
именно так -------------------- Помнишь как бодрили дискотеки прошлого века? Теперь стул, компьютер и нету человека. Nokia LifeStyle - Всё для смартфонов Nokia |
|||
|
||||
| -=Ustas=- |
|
|||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: 32 Всего: 69 |
TRUNCATE был включен в мускул с версии 3.23.28, если версия ниже, то делать DELETE FROM table.
-------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
На сколько я правильно понял документацию, то очень настоятельно рекомендуют использовать TRUNCATE т.к. DELETE очень тормозит
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| -=Ustas=- |
|
|||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: 32 Всего: 69 |
Не сказать что "очень", но TRUNCATE выполняется быстрее, т.к. она таблицу очищает одним "пучком", а не построчно ;) -------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
|||
|
||||
| Рейкин |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 198 Регистрация: 23.11.2003 Где: Баку, Азербайджан Репутация: 1 Всего: 1 |
Red Dragon - спасибо.
Да и спасибо всем, кто помог |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
Рейкин
Да я особо и не помог -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| -=Ustas=- |
|
|||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: 32 Всего: 69 |
[offtop P.S. Извиняюсь за флейм]
Red Dragon, не скромничай! [/offtop] -------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
|||
|
||||
| G0rinich |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 21.8.2006 Репутация: 1 Всего: 1 |
Как я понял, то повторно вносить запись в БД не следует.
Чтобы не выполнять к БД запрос на наличие записи, можно в таблице создать индекс типа UNIQUE по заданному полю. Тогда при попытке вставить запись, которая уже есть, БД вернет ошибку, иначе запрос выполнится нормально. Вот эту ошибку и надо отлавливать. Таким образом можно сократить кол-во запросов в 2 раза. В качестве альтернативы можно использовать запрос REPLACE. Работает аналогично UPDATE, только если заданной строки нет, он ее добавляет. |
|||
|
||||
| ewolf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 15.8.2006 Где: г. Москва Репутация: 8 Всего: 18 |
Это немного оффтоп, но в число ip переводится не так, а например по такому алгоритму
Здесь $num - числовое представление ip. Т.е. секции ip адреса записываются в виде байт четырехбайтного числа (тотже принцип, что и при записи цвета RGB в файлах) |
|||
|
||||
| anka |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 18.9.2006 Где: Azerbaijan Репутация: нет Всего: нет |
А ты храни их не в Базе а в Текставом файле
|
|||
|
||||
| Хоббит |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: 1 Всего: 1 |
я дал теорию... а уж как ты будешь действовать при переводе... деление на 255 или операциями сдвига.. это уже дело каждого
|
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |