Определение страны по IP: оптимизация

Wicked

Новичок
из глобального, чего не хватает именно движку Risearch:
* комментариев
* следования хоть каким-нибудь стандартам кодирования
* ооп
* неиспользования глобалов
* возможности переиспользовать код
* юнит-тестов
 

vovanium

Новичок
phprus
А реализация вашего алгоритма на С или С++ будет?
Да скорее всего. Просто так как php более "родной", на нем всё будет откатано. А потом уже будем портировать на другие языки, и естественно первоочередная задача будет сделать аналог mod_geoip для апача.
Ваша библиотека определяет несуществующие адреса как адреса из страны с кодом NA (Namibia)
Спасибо, поправил, заодно поправил другие коды, там некоторые страны изменились и несколько добавилось. Обновил файл.
 

DyaDya

Новичок
Если получше изучить структуры базы, по какому принципу она строится, то, возможно выражение
SELECT country_id, ip_from
FROM tbl
WHERE ip_to > a
ORDER BY ip_to
LIMIT 1

можно будет использовать без сортировки, т.е. :
SELECT country_id, ip_from
FROM tbl
WHERE ip_to > a
LIMIT 1

Не уверен, что даже когда ip_to - индекс, mysql не будет использовать ORDER BY. Хотя оптимизатор mysql возможно первое выражение сам упрощает до второго :)

А проверку на IP, если не сложная то можно сделать и в коде.

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

=====
а то что после добавления and ip_from < A возвращаются тормоза, то здесь следует глянуть а какой у тя индекс в данном случае.

Минусом конечно то, что индекс занимает хорошую долю памяти. Можешь посчитать.
 

vovanium

Новичок
Минусом конечно то, что индекс занимает хорошую долю памяти. Можешь посчитать.
Да та же база в MySQL весит минимум в 3 раза больше моего бинарного файла, причем более 500 КБ из них только индекс.

Как там кстати, впечатление у тех кто скачивал Sypex Geo, какие-то вопросы, пожелания, скорость работы подтвердилась? Можно релизить? :)
 

vovanium

Новичок
ОК, будем готовить релиз :)
Что касается городов, там такой мрак... Я благодаря GeoIP узнал что город (точнее деревня) Киев есть и в России, где-то на Дальнем Востоке, причем подсеть этого города входит в украинскую точку обмена трафиком :D А всё потому что какой-то умник ввел в ripe.net страну RU, вместо UA.
В общем наиболее вероятный вариант, это сделаю более шустрый вариант на базе GeoLite City, без ихнего массива областей в 80 КБ. Потом постепенно будем создавать свою базу, начав с городов Украины и России, по возможности удаляя подобные ляпы. Но основная морока с крупными провами...
 

DyaDya

Новичок
Господа, массив IP по странам надыбать я уже понял где.

Подскажите, где можно таблички базы качнуть по странам, регионам, городам (конечно не всем, а хотябы областные и районные центры). Хотябы для России. Я здесь не об IP, а по названиям и установленными связями между записями. Просто набивать не очень хотца.
 

kostya.sys

Новичок
есть немного извратный способ
ставится реверс прокси nginx
для nginx ставиться модуль геоИП, ему скармливается база
nginx принимая запрос от пользователя определяет страну самостоятельно в добавляет заголовок типа UserCountry: Russia
и перенаправляет запрос на обработку на бэк-сервер

получается очень быстро
 
Сверху