Здравствуйте, есть ли здесь люди которые сталкивались с вопросом определения страны пользователя по IP без использования сторонних API? Уже экспериментировал с хранением диапазонов стран в формате BINARY(4) для IPv4 и BINARY(16) для IPv6, результаты поиска с помощью BETWEEN одинаковые, сравнивал отдельное хранение в двух таблицах IPv4 и IPv6, так само и общее с применением VARBINARY(16), в итоге пришёл к выводу что быстрее работает хранение в формате INT UNSIGNED для IPv4, в таком раскладе скорость определения уменьшается в два раза, с 0.5 сек до 0.2 сек при определении 10 IP. В итоге имеем две таблицы, IPv4 хранится в INT UNSIGNED, IPv6 - BINARY(16). Составной индекс в MySQL вероятнее всего совсем не работает с бинарными данными, ибо при просмотре запроса через EXPLAIN он не используется, даже при принудительном включении его через FORCE INDEX результат тот же что и без него. Видел ещё реализацию через DECIMAL(39,0) для IPv6, но в таком случае результат ещё хуже чем BINARY(16). Если кто-то сталкивался с этим - поделитесь опытом/советом, буду очень признателен. Диапазоны хранятся с помощью INET_ATON - IPv4, INET6_ATON - IPv6.
________ посл. ред. 29.09.2024 в 14:05; всего 1 раз(а); by NoName233247533