Pull to refresh

Comments 34

TabGeo бесплатный пакет? Как часто обновляется? GeoIP с припиской Lite содержит далеко не полный перечень диапазонов. Платная версия точнее, но удовольствие дорогое
Да, бесплатный и безлимитный (можно свободно пихать в проприетарные продукты). Планирую — раз в месяц (ибо неделю парсятся whois-сервера).
Я сравнивал и равнялся на бесплатные продукты по странам, city-базы не трогал пока.
нужен модуль для nginx для этой базы
На данный момент только PHP.
Скажите, почему у вас весь обзор (сравнение) взято с сайта TabGeo?
Я как-то надеялся на независимое тестирование, а тут даже данные идентичны.
мне кажется dostelon и есть автор этой базы :)
Мне кажется, я достаточно тонко намекнул :)
Я — автор данной базы и драйвера.
Делал бесплатный продукт, который будет лучшим. Обогнать GeoIP не составило труда, а вот с Sypex пришлось постараться: два раза менял структуру базы и раз пять переписывал драйвер. Несколько раз хотел бросать разработку ибо попадал в тупики.
Тогда извольте поставить тег «Я пиарюсь».
А почему код не на GitHub, раз бесплатно? И документация по формату базы не помешала бы, чтобы портировать драйвер на другие языки…
Там библиотека из 15 строчек, в принципе и так понятно.
UFO just landed and posted this here
В блоке «Подключение библиотеки TabGeo» на сайте в зоне «output» — там определяется IP и страна. Или имелось в виду что-то другое?
Города (хотя бы российские) — планируется?
Планируется. Но это титанический труд, так как для страны есть строка «country», а с городами во whois — кто на что горазд (вписывают их и криво, и косо).
Если бы там были именно города… В geoip для Москвы запросто можно встретить Очаково или какое-нибудь Марьино. :)

Я в свое время составлял «базы синонимов» по окрестностям долготы-широты (которые на удивление более-менее корректны), получалось вполне приемлемо.
А как обстоят дела с определением города?
Я пока лучшего (наиболее точного) решения чем GeoLite для определения страны + уточнение по базе с ipgeobase.ru для RU локаций не нашел.
А так слишком громкий заголовок, если это только для определения страны.
На реальных проектах, как раз чаще нужно именно страна+город (гипермаркеты, локальные сервисы обслуживания, доставки, субдомены и т.д.).
Лично я ни разу не встречал задачи определить просто страну. Всегда в комплексе.
1. Если слить соседние диапазоны из одной страны в один, то «точность базы» по вашей логике уменьшится, что неправда.
2. Приложение на python с загруженной в память базой диапазонов на виртуалке Ubuntu дает примерно сто пятьдесят тысяч ответов на запрос страны по IP в секунду.

Для того, чтобы решать только эту задачу (только страна), годятся очень простые и эффективные средства.
В базе все диапазоны склеены. Изначально для этой базы было проанализировано 5 711 790 диапазонов.
Интересно, а что выдаст приложение на с++ с загруженной в память базой по сравнению с питоном?
Не планируете ли сделать выгрузку базы в более читабельном виде? Там, конечно, кода на 10 строк и структура понятна, но из плейнтекст-формата было бы удобнее банальным шелл-скриптом генерировать соответствующий блок конфигурации nginx для ngx_http_geo_module, который заведомо быстрее, чем любое решение на php, т.к. все грузится в память на этапе конфигурации nginx.
На днях сделаю выгрузку в csv, как у GeoIP.
Сделайте лучше репозиторий на github и распространяйте через composer.
Раз уж меня упомянули, прокомментирую :)

  1. Для начала, так мерять скорость алгоритмов бессмысленно, так как время инициализации скрипта занимает больше времени (причем в десятки раз), чем сам поиск IP. И вполне естественно, что чем менее функциональный php скрипт который нужно подключать, тем больше запросов в секунду он будет выдавать. Особенно, если не использовать кэширование байткода.

  2. Скорость как-то странно замеряна, похоже у SxGeo включен режим BATCH. Так как при тестировании с помощью ab (с параметрами -n 10000 -c 10, Apache 2.4.9 + PHP 5.5.10) получил результат 1200 SxGeo и 1500 TabGeo. Это без включения OPcache. Если же включить OPcache, то разница становится на уровне погрешности, оба скрипта показывают скорость в районе 2100 запросов в секунду (± 50). Так что, более высокая скорость выполнения TabGeo по сути только благодаря тому, что нужно меньше времени, чтобы интерпретировать php-код, который у TabGeo вполне естественно значительно меньше, так как работает только со странами, одним форматом базы, да и нет даже проверки на валидность IP. К примеру:

    echo tabgeo_country_v4('33.355.66.77'); // Выдаёт US, без всяких предупреждений или ошибок
    

    Но при этом в batch режиме (когда один раз инициализация и много раз поиск IP) SxGeo работает в 5 раз быстрее без кэширования базы, и в 10 раз быстрее с кэшированием базы в памяти.

  3. Что касается точности, наличие большого количества диапазонов вообще ничего не говорит о точности. А тем более, когда вы берете данные из country в whois. Там зачастую бывает фигня написана. Для примера есть IP в которых указана страна RU, а дальше написано, что это Киев. GeoIP на этом раньше попадались, даже нашли какой-то поселок Киев на Дальнем Востоке.
    Ну или еще пример 185.89.14.222 у вас он значится, как EU (хотя такой страны нет, и в SxGeo её нет), по сути этот IP просто входит в число IP-блоков принадлежащих RIPE, но он еще никакому реальному пользователю не присвоен. В SxGeo такие блоки считаются пустыми, и не учитываются в статистике.

  4. SxGeo изначально задумывался под BATCH режим, именно в таком режиме он будет работать, как демон, либо как модуль apache/nginx, а в таком режиме даже без кэширования он работает в 5-10 раз быстрее вашего решения, и на поиск каждого IP нужно лишь одно обращение к диску/кэшу.
По этому и пришлось отказаться от оформления в виде класса, ибо жрет немерено времени и памяти.

Кстати, я размышлял: делать мне валидацию ip в функции или нет (одна строчка кода). И посчитал, что ip адрес должен быть провалидирован до передачи в функцию (ибо суть функции совсем не в валидации) и ip может быть использован в дальнейшем коде (или в предшествующем) и именно там надо проверять верность ip. Я бы сказал, что данное различие — идеологическое.

Это «мертвые» диапазоны, я посчитал их менее важными, где-то в базе они сохранились где-то нет, а код страны у них обычно возникает из-за склейки диапазонов (в aunic тьма таких мертвых диапазонов) — их отсутствие или наличие ничего не решает, с них никто не придет. Страны EU нет, но код есть (около 1 200 вхождений) — и определить некоторые ip точнее, чем EU — сложно. Тоже самое и с AP.
Определение некоторых связок страна-ip, как гадание на кофейной гуще, например, есть пул адресов, которые принадлежат водафону, метка страны у них GB, а используются они в Индии, такое, конечно не часто, но встречается.
Если нужна скорость, люди в первую очередь отказываются от php скриптов в пользу C api или к примеру ngx_http_geoip_module. Вот с ними бы и мерялись…
В целом, я за позицию «больше печенек вкусных и разных»…

Для меня важно не только страну определять, но и город. Так что пока мимо меня, но начало интригует.
Надо отметить, что еще будет сильным аргументом качество данных (а с исходными данными, в этом плане, по России — беда).

Пока вижу единственный неоспаримый плюс — возможность простого обновления базы из скрипта. У Sypex'а этого вроде нет.
До городов дело так и не дошло? :) Кстати, а как вы парсите whois? С какого сервиса берёте эту инфу? Может тоже попарсить :)
Не подскажите что сейчас с tabgeo стало? Вроде бы сайт не работает, обновлений нет.
Sign up to leave a comment.

Articles