Sypex Geo

Sypex Geo - система для определения страны пользователя по IP. На текущий момент представлена в виде PHP-класса подключаемого в другие скрипты.

Sypex Geo - распространяется по лицензии BSD, т. е. является абсолютно бесплатным.

Скачать

Sypex Geo 2.0.0  (414 КБ) - релиз от 13.02.2012 (база данных обновлена 13.02.2012)

База WIPmania для SxGeo 2  (284 КБ) - база данных обновлена 13.02.2012

Что нового

В версии 2.0.0 был переработан, как формат файла, так и значительно оптимизирован алгоритм. В результате:

  • Cкорость работы увеличилась еще в 1,7-2 раза.
  • Размер файла базы данных стал на 25% меньше.
  • Из-за уменьшения размера базы, уменьшилось и потребление памяти при кэшировании бд.
  • Добавлен дополнительный пакетный режим, который позволяет еще на 40-45% ускорить работу, когда нужно обработать много IP за раз.

История создания

Для системы статистики нашей Sypex CMS нужен был модуль определения страны посетителей, изначально предполагалось выбрать одно из готовых решений, в частности, рассматривалась GeoIP. Было проведено тестирование по скорости, вариант с базой IP в MySQL вскоре отпал из-за низкой производительности, а вариант с бинарной базой от GeoIP (рассматривалось php API) оказался самым быстрым. Нам стало любопытно почему он так быстро работает и заглянули в исходники. После ознакомления было выявлено несколько недостатков данной реализации.

Один из основных, что для определения страны нужно 20 + n * d чтений файла (где n-количество определяемых IP, d - количество прыжков по бинарному дереву, примерно от 3 до 32). Естественно файловые операции довольно медленные, поэтому для максимальной производительности их количество желательно ограничить.

Ради спортивного интереса было был разработан свой модуль и формат бинарного файла. Скорость которого оказалась в 5 раз быстрее GeoIP, т.к. он содержал минимальное число обращений к файловой системе. Для выборки необходимо всего 2 + 1 * n (где n-количество определяемых IP)

Преимущества

Скрипт на чистом PHP + бинарный файл своего формата, сравнения производились с GeoIP (pure php api). Итак основные отличия:

  • производительность в 5-7 раз выше чем у GeoIP (тестировалось на выборке 10 000 случайных IPшек, у GeoIP ~ 4 800 IP/сек, у Sypex Geo ~ 27 800 IP/сек, без кэширования базы в памяти);
  • маленький размер базы (база сделанная на основе GeoLite Country, в 2 раза меньше весит);
  • небольшое количество обращений к диску, для определенения IPшек нужно 3 + 1 * n чтений с диска, у GeoIP нужно 20 + n * d (где n - количество IPшек, d - количество прыжков по бинарному дереву, примерно от 3 до 32);
  • как и у GeoIP есть возможность кэширования базы в памяти, что повышает производительность, еще примерно на 40-45%.

Использование

1. Скопировать SxGeo.php и SxGeo.dat на сервер
2. Подключить файл SxGeo.php в свой скрипт, добавив строку

 include("SxGeo.php");

3. Создать объект SxGeo

// Первый параметр - имя файла с базой (используется оригинальная бинарная база SypexGeo.dat)
// Второй параметр - режим работы:
//     SXGEO_FILE   (работа с файлом базы, режим по умолчанию);
//     SXGEO_BATCH (пакетная обработка, увеличивает скорость при обработке множества IP за раз)
//     SXGEO_MEMORY (кэширование БД в памяти, еще увеличивает скорость пакетной обработки, но требует больше памяти).
$SxGeo = new SxGeo(); // Режим по умолчанию, файл бд SxGeo.dat
//$SxGeo = new SxGeo('SxGeo.dat', SXGEO_BATCH | SXGEO_MEMORY); // Самый производительный режим

4. Определяем страну

 // $SxGeo->get_cc($ip);  (возвращает двухзначный ISO-код страны)
 // $SxGeo->get_num($ip); (возвращает номер страны, в соответствии с массивом $SxGeo->num2cc)
 $cc = $SxGeo->get_cc($ip);

5.  Если нужно осводить рессурсы вызываем метод close (не обязательно)

 $SxGeo->close();

Sypex Dumper


Статистика

Скачиваний:265 503
Обработано данных:43,0 TB

Новости

2011.10.19

Вышла новая версия Sypex Dumper Pro 2.0.9.

2012.05.10

2012.03.31

2012.03.31


www.megastock.ru Проверить аттестат WMID 985836730041