PHP:Правильный способ хранения IP-адреса в MySQL и самый быстрый способ поиска IP-адреса по миллионам строк

StackOverflow https://stackoverflow.com/questions/3980489

Вопрос

Я сохраняю IPv4-адреса в столбце типа "int unsigned" с inet_aton .[Я все делаю правильно?И необходимо ли использовать "без знака"?] Этот конкретный столбец также индексируется.Поскольку во всей таблице будут миллионы строк и несколько строк, содержащих один и тот же IP-адрес, какой способ поиска этих строк будет самым быстрым?

.. или я иду по этому пути неправильно?

Это было полезно?

Решение

Я делаю это правильно? И использует «без знаки» необходимым?

Да. Без unsigned Более высокие IP-адреса не будут храниться должным образом и использование int (вместо varchar) хранит его наиболее эффективно.

Что будет самым быстрым способом поиска этих строк?

Что касается оптимизации поиска, это зависит от того, что все вы ищете (дополнительные таблицы и т. Д.). В целом, индексация колонки unsigned INT дает вам быструю производительность.

Другие советы

Использование inet_aton - правильный способ сделать это, поэтому вы не сохраняете дополнительную бессмысленную информацию (нет смысла сохранять значение, большее 256 для любых заданных 3 чисел).В результате получается 32-битное число, которое будет вписываться в unsigned int.

Индексация по столбцу int ускорит поиск по IP-адресу.Если ваша база данных станет ДЕЙСТВИТЕЛЬНО большой, вы начнете сталкиваться с проблемами масштабирования при хранении подобных вещей в MySQL.

Я предполагаю, что вы не собираетесь этого делать, но укажу, что хранение полной информации журнала для большого загруженного сайта в СУБД, как правило, считается плохой вещью (tm).Вам не нужны свойства реляционной целостности, гарантируемые базой данных, и вы записываете гораздо больше записей, чем читаете.Рассмотрите возможность использования nosql или добавления к плоским файлам вместо этого и при необходимости разбора ваших журналов с помощью специальной программы.

Да, это лучший способ хранить IP-адреса в MySQL.

Если вы посмотрите на документацию для Inet_aton. Вы можете увидеть, что рекомендуется использовать столбец unsigned int или любой IP-адрес с первым OCTED более 127 не будет храниться правильно.

Это также очень быстрый способ сделать поиск. MySQL обрабатывает целочисленные столбцы очень хорошо, и, индексируя этот столбец и используя INET_ATON в своем поиде, вы можете добиться очень быстрого запросов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top