You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Положить файлы с ip адресами в папку /public/files, два файла для ipv4 и для ipv6
Запустить миграции: phalcon migration run
Запустить консольный скрипт, которые с csv перенес все ip адреса в нужном формате в базу: php app/cli.php copy-data main 4 и потом чтобы перенести ipv6 php app/cli.php copy-data 6
Проверить поиск можно по url /ipv4/get/{ip}, где {ip} адрес в формате x.x.x.x, результат будет json с координатами города
Как это работает?
Для поиска среди интервалов ip адресов используется расширение postgres ip4r, и функциональный индекс ip4r(ip_from, ip_to)
Копирование новых ip адресов, базу адресов с сайта можно копировать используя wget и класть в папку с файлами, на крон можно поставить раз или два в месяц запускать скрипт который копирует адреса в базу, работа скрипта никак не повлияет на произовдительность, копирование происходит следуюущем образом:
Начало транзакции
Создается временная таблица для новых ip адресов
Обходим файл с ip адресами и вставляем в базу по 1000
Когда обошли весь файл, переименовываем старую таблицу в {table}_old
Переименовываем новую таблицу в название как в системе т.е. в {table}
У сиквенса меняем таблицу на {table}
Удаляем {table}_old
Если все ок, завершаем транзакцию
Для поиска, в модели создан метод finByIp()
Результат:
Поиск в базе среди ~4000000 ip адресов (v4), по id занимает в среднем 0,02 ms
Поиск в базе среди ~4000000 ip адресов (v4), по интервалу ip занимает в среднем 0,07 ms