PHP解析ip2region库,ip2region – 开源IP地址查询库,聚合IP地址库API

IP2Region是一个高准确率(99.9%)且快速(0.0x毫秒级)的IP地址查询库,数据库文件仅1.5MB。它提供了多种查询算法和客户端支持(包括Java、PHP、C、Python等),并支持B-tree和Memory算法,适用于多线程环境。数据来源于多个知名IP到地名提供商,定期更新。
摘要由CSDN通过智能技术生成

ip2region 开源IP地址查询库

ip2region 是一个准确率99.9%的ip地址库。 0.0x毫秒级查询,数据库文件大小只有1.5M,提供了java, php, c, python查询客户端和Binary,B树,内存三种查询算法。

1. 99.9%准确率,定时更新:

数据聚合了一些知名ip到地名查询提供商的数据,这些是他们官方的的准确率,经测试着实比纯真啥的准确多了。

每次聚合一下数据需要1-2天,会不定时更新。

ip2region的数据聚合自以下服务商的开放API或者数据(升级程序每秒请求次数2到4次):

备注:如果上述开放API或者数据都不给开发时ip2region将停止数据的更新服务,目前是2~3个月更新一次。

2. 标准化的数据格式:

每条ip数据段都固定了格式:城市Id|国家|区域|省份|城市|ISP

只有中国的数据精确到了城市,其他国家只能定位到国家,后前的选项全部是0,已经包含了全部你能查到的大大小小的国家。 (请忽略前面的城市Id,个人项目需求)

3. 体积小:

生成的数据库文件ip2region.db只有1.5M(1.2版本前是3.5M)

4. 多查询客户端的支持,0.0x毫秒级别的查询

已经集成的客户端有:java、C#、php、c、python、nodejs、php扩展(php5和php7)、golang、rust、lua、lua_c。

提供了两种查询算法,响应时间如下:

客户端/binary算法/b-tree算法/Memory算法:

c#/0.x毫秒/0.x毫秒/0.x毫秒

java/0.x毫秒/0.x毫秒/0.1x毫秒 (使用RandomAccessFile)

php/0.x毫秒/0.1x毫秒/0.1x毫秒

c/0.0x毫秒/0.0x毫秒/0.00x毫秒(b-tree算法基本稳定在0.02x毫秒级别)

python/0.x毫秒/0.1x毫秒/未知

lua/0.x毫秒/0.x毫秒/0.x毫秒

lua_c/0.0x毫秒/0.0x毫秒/0.00x毫秒

1

2

3

4

5

6

7

8

9

提供了两种查询算法,响应时间如下:

客户端/binary算法/b-tree算法/Memory算法:

c#/0.x毫秒/0.x毫秒/0.x毫秒

java/0.x毫秒/0.x毫秒/0.1x毫秒(使用RandomAccessFile)

php/0.x毫秒/0.1x毫秒/0.1x毫秒

c/0.0x毫秒/0.0x毫秒/0.00x毫秒(b-tree算法基本稳定在0.02x毫秒级别)

python/0.x毫秒/0.1x毫秒/未知

lua/0.x毫秒/0.x毫秒/0.x毫秒

lua_c/0.0x毫秒/0.0x毫秒/0.00x毫秒

任何客户端b-tree都比binary算法快,当然Memory算法固然是最快的!

maven仓库地址:

org.lionsoulip2region1.7.2

1

org.lionsoulip2region1.7.2

nuget安装命令

Install-Package IP2Region

1

Install-PackageIP2Region

5. 测试程序:

C#、Node.js、lua_c的测试请具体参考文件夹中README.md 说明。

java:

cd binding/java ant all java -jar ip2region-{version}.jar ./data/ip2region.db

1

cdbinding/javaantalljava-jarip2region-{version}.jar./data/ip2region.db

php:

php binding/php/testSearcher.php ./data/ip2region.db

1

phpbinding/php/testSearcher.php./data/ip2region.db

c:

cd binding/c/ gcc -g -O2 testSearcher.c ip2region.c ./a.out ../../data/ip2region.db

1

cdbinding/c/gcc-g-O2testSearcher.cip2region.c./a.out../../data/ip2region.db

python:

python binding/python/testSearcher.py ./data/ip2region.db

1

pythonbinding/python/testSearcher.py./data/ip2region.db

lua:

cd binding/lua/ lua testSearcher.lua ../../data/ip2region.db

1

cdbinding/lua/luatestSearcher.lua../../data/ip2region.db

均会看到如下界面:

initializing B-tree ...

+----------------------------------+

| ip2region test script |

| Author: chenxin619315@gmail.com |

| Type 'quit' to exit program |

+----------------------------------+

p2region>> 101.105.35.57

2163|中国|华南|广东省|深圳市|鹏博士 in 0.02295 millseconds

1

2

3

4

5

6

7

8

initializingB-tree...

+----------------------------------+

|ip2regiontestscript|

|Author:chenxin619315@gmail.com|

|Type'quit'toexitprogram|

+----------------------------------+

p2region>>101.105.35.57

2163|中国|华南|广东省|深圳市|鹏博士in0.02295millseconds

输入ip地址开始测试,第一次会稍微有点慢,在运行命令后面接入binary,memory来尝试其他算法,建议使用b-tree算法,速度和并发需求的可以使用memory算法。

具体集成请参考不同客户端的测试源码。

6. 如何生成ip2region.db文件

从1.8版本开始,ip2region开源了ip2region.db生成程序的java实现,提供了ant编译支持,编译后会得到以下提到的dbMaker-{version}.jar,对于需要研究生成程序的或者更改自定义生成配置的请参考${ip2region_root}/maker/java内的java源码。

从ip2region 1.2.2版本开始里面提交了一个dbMaker-{version}.jar的可以执行jar文件,用它来完成这个工作:

1, 确保你安装好了java环境(不玩Java的童鞋就自己谷歌找找拉,临时用一用,几分钟的事情)

2, cd到${ip2region_root}/maker/java,然后运行如下命令:

java -jar dbMaker-{version}.jar -src 文本数据文件 -region 地域csv文件 [-dst 生成的ip2region.db文件的目录]

# 文本数据文件:db文件的原始文本数据文件路径,自带的ip2region.db文件就是/data/ip.merge.txt生成而来的,你可以换成自己的或者更改/data/ip.merge.txt重新生成

# 地域csv文件:该文件目的是方便配置ip2region进行数据关系的存储,得到的数据包含一个city_id,这个直接使用/data/origin/global_region.csv文件即可

# ip2region.db文件的目录:是可选参数,没有指定的话会在当前目录生成一份./data/ip2region.db文件

1

2

3

4

5

java-jardbMaker-{version}.jar-src文本数据文件-region地域csv文件[-dst生成的ip2region.db文件的目录]

# 文本数据文件:db文件的原始文本数据文件路径,自带的ip2region.db文件就是/data/ip.merge.txt生成而来的,你可以换成自己的或者更改/data/ip.merge.txt重新生成

# 地域csv文件:该文件目的是方便配置ip2region进行数据关系的存储,得到的数据包含一个city_id,这个直接使用/data/origin/global_region.csv文件即可

# ip2region.db文件的目录:是可选参数,没有指定的话会在当前目录生成一份./data/ip2region.db文件

3, 获取生成的ip2region.db文件覆盖原来的ip2region.db文件即可

4, 默认的ip2region.db文件生成命令:

cd ${ip2region_root}/java/

java -jar dbMaker-1.2.2.jar -src ./data/ip.merge.txt -region ./data/global_region.csv

# 会看到一大片的输出

1

2

3

4

cd${ip2region_root}/java/

java-jardbMaker-1.2.2.jar-src./data/ip.merge.txt-region./data/global_region.csv

# 会看到一大片的输出

5, 数据库文件的结构和原理请阅读 @冬芽 的blog:“ip2region数据库文件的结构和原理”

fbec7a3b3504d014d2e7f964ad977369.png

7. 其他备注

1, 全部binding的各个search接口都不是线程安全的实现,不同线程可以通过创建不同的查询对象来使用。

2, memorySearch接口,在发布对象前进行一次预查询,可以安全用于多线程环境。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值