RSS
 

База GeoIP – страны и города, июнь 2011 (+скрипт обновления)

08 Июн

Вышла в свет обновленная версия русскоязычной базы данных стран и городов. Основные изменения:
- за счёт новой базы ipgeobase.ru повысилась точность определения городов Украины
- из бесплатной версии базы geobaza.ru исчезли города, поэтому точность определения городов других стран СНГ понизилась
- добавлен скрипт, с помощью которого вы можете самостоятельно обновлять базу (без добавления новых городов и стран)
- таблицы net_ru_2 и net_su удалены из базы, изменены примеры запросов

База распространяется в двух модификациях: «Страны и города» (21Mb, после установки ~122Mb)  и «Только страны» 2Mb, после установки ~13Mb). Также в архивах находится небольшой пример использования базы данных на php.

Точность определения страны ~99%, точность определения городов в среднем ~95%.  Много это или мало – зависит от задач, которые собираетесь решать с помощью этой базы.

Тестовое демо – определение вашей страны и города по IP-адресу

Рабочее демо – определение вашего города в форме поиска билетов

Для установки базы рекомендую воспользоваться программами типа mysqldumper или через ssh выполнить
mysql –p –uюзер база_данных < файл.sql

«Скрипт обновления» (~300Kb, после установки ~1Mb) адаптирован только для текущей версии базы (июнь 2011), обновить с его помощью прежние версии невозможно. Для обновления базы импортируйте файл geo_update_2011_06.sql (содержит две технические таблицы), скачайте свежие архивы с maxmind и ipgeobase и запустите из консоли update_maxmind.php и update_ru.php. При обновлении базы городов maxmind выполняется ~4 миллиона select-ов и ~2 миллиона insert-ов, поэтому операция требует значительных ресурсов и времени (~30-60 минут). Обновление базы городов maxmind выполняется 20-30 минут.

В справочнике стран присутствуют острова, которые не являются независимыми государствами, но значительно удалены от своих метрополий.

В справочнике городов возможны ошибки (в том числе дубли).

В базе «Только страны» есть блоки IP только европейских стран (из ipgeobase, таблица net_euro) и стран всего мира (в том числе европейских, из maxmind, таблица net_country_ip). Теоретически европейские страны должны точнее определяться по первому варианту, но практической проверки не было.

Идеи по усовершенствованию и повышению качества базы приветствуются.

Немного статистики

В текущей версии базы 94,615 населенных пунктов.

Количество населенных пунктов по разным странам:

Страна Количество
Германия 18,468
США 15,798
Италия 6,645
Австрия 6,417
Испания 5,721
Австралия 5,134
Франция 4,651
Российская Федерация 3,287
Канада 3,027
Польша 2,844
Бразилия 2,342
Швейцария 1,814
Бельгия 1,589
Япония 1,445
Португалия 1,289
Ирландия 1,128
Аргентина 1,086
Мексика 1,069
Украина 800
Китай 724
Болгария 615
Великобритания 585
Колумбия 545
Индия 359
Люксембург 359
Южно-Африканская Республика 333
Норвегия 330
Турция 304
Новая Зеландия 280
Венгрия 262
Сербия 221
Чили 203
Казахстан 194
Филиппины 188
Чехия 176
Румыния 171
Республика Корея 166
Словакия 161
Швеция 159
Нидерланды 157
Хорватия 141
Эквадор 141
Финляндия 134
Гватемала 126
Венесуэла 123
Гондурас 121
Беларусь 102
Иран 96
Греция 96
Литва 95
Израиль 91
Латвия 89
Эстония 85
Молдова 85
Тринидад и Тобаго 79
Перу 69
Барбадос 56
Ямайка 56
Коста-Рика 56
Индонезия 56
Доминиканская республика 53
Маврикий 52
Дания 51
Египет 46
Марокко 43
Македония 41
Армения 40
Нигерия 39
Вьетнам 38
Алжир 38
Уругвай 36
Панама 36
Сальвадор 33
Словения 30
Малайзия 30

В остальных странах менее 30 населенных пунктов.

Добавлено 09.06.2011
Оптимизирован скрипт обновления базы maxmind, операция выполняется быстрее и потребляет меньше вычислительных ресурсов.

 

Тэги:

Обсудить

 

 
  1. Макс

    25 июня 2011, 14:48

    А можно использовать эту базу не локально, ставя на сервер, а онлайн, передавая запрос с GET и получая координаты?

     
  2. NetLoad

    4 июля 2011, 19:59

    Можно, если вы установите её на свой сервер.

     
  3. Павел

    4 августа 2011, 1:43

    Зачем так все усложнять:
    select * from (select * from net_ru where begin_ip=$int
    Если можно написать так:
    select * from net_ru where begin_ip=$int order by begin_ip desc limit 1

     
  4. Viktor

    19 августа 2011, 15:27

    А в какой кодировке сам файл geo_city_2011_06.sql? Хочу перевести в UTF-8 для повторной заливки на сервак. Первая попытка прошла неудачно по причине этой самой кодировке. Спасибо!

     
  5. Viktor

    19 августа 2011, 15:37

    Всё решилось добавлением опции –default-character-set=UTF8

     
  6. Oleg

    16 февраля 2012, 13:49

    А где можно взять список регионов с англ. и русскоязычным наименованием ?