离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率

This package's canonical repository appears to be gone and the package has been frozen as a result.

V2 2023-07-26 02:20 UTC

This package is not auto-updated.

Last update: 2024-01-25 03:33:17 UTC


README

这是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了PHP语言的 dat 数据生成和查询客户端实现。

特性

1、IP 数据管理框架

dat 支持亿级别的 IP 数据段行数,默认的 region 信息都固定了格式:国家|区域|省份|城市|ISP,缺省的地域信息默认是0。 region 信息支持完全自定义,例如:你可以在 region 中追加特定业务需求的数据,例如:GPS信息/国际统一地域信息编码/邮编等。也就是你完全可以使用 它 来管理你自己的 IP 定位数据。

2、数据去重和压缩

dat 格式生成程序会自动去重和压缩部分数据,默认的全部 IP 数据,生成的 ip.dat 数据库是 11MiB,随着数据的详细度增加数据库的大小也慢慢增大。

3、极速查询响应

即使是完全基于 dat 文件的查询,单次查询响应时间在十微秒级别,可通过如下两种方式开启内存加速查询:

  1. vIndex 索引缓存 :使用固定的 512KiB 的内存空间缓存 vector index 数据,减少一次 IO 磁盘操作,保持平均查询效率稳定在10-20微秒之间。
  2. dat 整个文件缓存:将整个 dat 文件全部加载到内存,内存占用等同于 dat 文件大小,无磁盘 IO 操作,保持微秒级别的查询效率。

    安装扩展

    
    

composer require laoqianjunzi/ip

# 数据查询

$ip='127.0.0.1 '; $address = app()->make(IPSearcher::class)->search($ip);

# `dat` 数据更新

ip2region 旨在于 <b>研究 IP 数据的存储和快速查询的设计和实现</b>,并没有原始 IP 数据的支撑,也不会有商用版本。
本项目的自带的 `ip.txt` 原始数据已经很久没有更新,也不会再更新,对于数据精度和更新频率要求很高的使用场景建议购买第三方商用数据,你可以使用如下几种方式来尝试自己更新数据:

### 手动编辑更新
你可以基于 自带的 `ip.txt` 原始 IP 数据来自己修改,目前数据源有如下几种方式:



### 1、并发查询必读
全部查询客户端的 search 接口都 <b>不是</b> 并发安全的实现,不同进程/线程/协程需要通过创建不同的查询对象来安全使用,并发量很大的情况下,基于文件查询的方式可能会导致打开文件数过多的错误,请修改内核的最大允许打开文件数(fs.file-max=一个更高的值),或者将整个dat加载到内存进行安全并发使用。