1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lionsoul-ip2region

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
ReadMe.md 15 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 04.03.2025 03:53 e8bcdc9

Что такое ip2region

ip2region — это библиотека для офлайн-определения местоположения по IP-адресу и управления данными о локализации IP. Она обладает скоростью запросов в десятках микросекунд и предоставляет реализацию клиентских библиотек для генерации и запросов данных в формате xdb для множества популярных языков программирования.

Основные характеристики ip2region

1. Управление данными о локализации IP

Формат xdb поддерживает миллионы записей с информацией об IP-адресах. По умолчанию информация о регионе имеет следующий формат: Страна|Регион|Штат|Город|Интернет-провайдер. В случае отсутствия информации о регионе используется значение по умолчанию равное нулю. Информация о регионах может быть полностью настроена пользователем, допускается добавление специфических данных для бизнес-потребностей, таких как GPS данные, международные коды областей или почтовые индексы. Таким образом, можно использовать ip2region для управления собственными данными о локализации IP.

2. Удаление дубликатов и сжатие данных

Программа для создания файла xdb автоматически удаляет дубликаты и сжимает часть данных. Полностью загруженные данные всех IP адресов занимают около 11МБ. Размер базы данных увеличивается пропорционально детализированности данных.

3. Быстрое выполнение запросов

Даже при полной работе с файлами xdb, время ответа одного запроса составляет несколько микросекунд. Для повышения производительности могут использоваться два метода:

  1. Кэширование индекса vIndex: использование постоянного пространства памяти размером 512КБ для кэширования данных векторного индекса, что позволяет минимизировать операции чтения с диска и поддерживать среднее время выполнения запроса в диапазоне 10-20 микросекунд.
  2. Кэширование всего файла xdb: загрузка всего файла xdb в память, что обеспечивает скорость выполнения запросов на уровне микросекунд без использования операций чтения с диска.

Запросы данных xdb

Приложение API, руководство пользователя и тестовые программы доступны в разделе "ReadMe" каждого клиента поиска. Все реализации клиентских библиотек представлены ниже:

OK? Статус Язык программирования Описание Автор
:heavy_check_mark: Выполнено golang Реализация клиента поиска для Go Lion
:heavy_check_mark: Выполнено php Реализация клиента поиска для PHP Lion
:heavy_check_mark: Выполнено java Реализация клиента поиска для Java Lion
:heavy_check_mark: Выполнено lua Реализация чистого клиента поиска для Lua Lion
:heavy_check_mark: Выполнено c Реализация клиента поиска для ANSI C Lion
:heavy_check_mark: Выполнено lua_c Реализация расширения Lua C для клиента поиска Lion
:heavy_check_mark: Выполнено rust Реализация клиента поиска для Rust gongzhengyang
:heavy_check_mark: Выполнено python Реализация клиента поиска для Python 厲害的花花
:heavy_check_mark: Выполнено nodejs Реализация клиента поиска для Node.js Wu Jian Ping
:heavy_check_mark: Выполнено csharp Реализация клиента поиска для C# Alen Lee
:heavy_check_mark: Выполнено erlang Реализация клиента поиска для Erlang leihua996
    Начало планируется php_ext Реализация расширения PHP C для клиента поиска Подтверждение требуется
:heavy_check_mark: Выполнено nginx Реализация расширения Nginx для клиента поиска Wu Jian Ping
:heavy_check_mark: Выполнено C++ Реализация клиента поиска для C++ Yunbin Liu
:heavy_check_mark: Выполнено Typescript Реализация клиента поиска для TypeScript Alan Lee

Следующие реализации инструментов были предоставлены сообществом через внешние репозитории:

OK? Статус Язык программирования Описание Автор
:heavy_check_mark: Выполнено ruby-ip2region Реализация клиента поиска для Ruby jicheng1014
:heavy_check_mark: Выполнено Ip2regionTool Инструмент для преобразования данных ip2region orestonce

Генерация данных xdb

Приложение API, руководство пользователя и тестовые программы доступны в разделе "ReadMe" каждого генератора данных.

OK? Статус Язык программирования Описание Автор
:heavy_check_mark: Выполнено golang Реализация генератора данных для Go Lion
:heavy_check_mark: Выполнено java Реализация генератора данных для Java Lion
    Начало планируется c Реализация генератора данных для ANSI C Lion
:heavy_check_mark: Выполнено python Реализация генератора данных для Python leolin49
:heavy_check_mark: Выполнено csharp Реализация генератора данных для C# Alan Lee
:heavy_check_mark: Выполнено rust Реализация генератора данных для Rust KevinWang
:heavy_check_mark: Выполнено C++ Реализация генератора данных для C++ Yunbin Liu

Обновление данных xdbЦель проекта ip2region заключается в исследовании дизайна и реализации хранения данных IP и быстрого поиска. Проект не предоставляет первичных данных IP и не предлагает коммерческую версию. Исходные данные ./data/ip.merge.txt давно не обновляются и больше не будут обновлены. Для случаев, требующих высокой точности и частоты обновления данных, рекомендовано приобретение коммерческих данных от сторонних источников. Можно использовать следующие способы для самостоятельного обновления данных:

Ручное редактирование данных

Вы можете использовать исходные данные IP, предоставленные ip2region, и редакторы данных, предлагаемые ip2region, чтобы самостоятельно модифицировать данные. Доступны следующие источники данных:

  1. Исходные данные IP, предоставленные сообществом ip2region (пожалуйста, обратитесь к нижней части страницы для получения уведомлений от сообщества)
  2. Темы форума GitHub/Gitee с меткой [数据源补充]
  3. Личные данные: такие как данные, предоставленные клиентами, или данные, полученные через GPS и Wi-Fi, или данные из других легальных источников

Инструкция по использованию редакторов данных представлена в разделе "ReadMe" каждого генератора данных:

OK? Статус Язык программирования Описание Автор
:heavy_check_mark: Выполнено golang Редактор исходных данных IP для Go Lion
    Начало планируется java Редактор исходных данных IP для Java Lion
:heavy_check_mark: Выполнено C++ Редактор исходных данных IP для C++ Yunbin Liu

Автоматическое обновление данных

Если вы хотите обновлять данные с помощью своего API или другого источника данных, вы можете воспользоваться алгоритмом обновления, представленным в видео:

  1. Видео по обновлению данных - Часть 1
  2. Видео по обновлению данных - Часть 2

Примечания

Параллельные запросы

Параллельное использование кэша всего файла xdb безопасно. Однако параллельное использование запросов на основе файлов не является безопасным. Различные процессы/потоки/корутины должны создавать отдельные объекты запросов для безопасного использования. При большом количестве параллельных запросов возможно возникновение ошибок из-за недостаточного количества открытых файлов. В этом случае следует увеличить максимальное количество открытых файлов (fs.file-max=выше значение).

Технические ресурсы

  1. Анализ структуры данных xdb: "ip2region xdb структура данных и процесс поиска"
  2. Анализ процесса поиска данных xdb: "ip2region xdb структура данных и процесс поиска"
  3. Анализ процесса генерации данных xdb: "ip2region xdb двоичная структура данных и процесс генерации"
  4. Методы обновления данных xdb: "ip2region обновление данных и использование редактора данных xdb"

Технический блог

Пожалуйста, подпишитесь на официальный WeChat-канал Lionsoul-org (狮子的魂).

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/lionsoul-ip2region.git
git@api.gitlife.ru:oschina-mirror/lionsoul-ip2region.git
oschina-mirror
lionsoul-ip2region
lionsoul-ip2region
master