『黑科技』开源 IP 地址定位库 ip2region,99.9%的准确率

35岁的程序员 2019-05-09 18:59:31 ⋅ 964 阅读

ip2region 是什么?

ip2region 是准确率 99.9% 的 IP 地址定位库,0.0x毫秒级查询,提供了 Java、PHP、C、Python、Node.js、Golang、C#、Rust、Lua的查询绑定和 Binary、B树、内存三种查询算法!

ip2region 1.9更新内容

1、数据升级至2019/05/02的版本,国外的数据增加了大量城市级别的数据,ip2region.db增长到7MB。
2、开源了ip2region.db的生成程序,目前提供了java语言的实现,在${ip2region_root}/maker目录下,便于对ip2region的研究或者更改自定义生成配置等,后期会提供C语言的实现。

ip2region特性

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

数据聚合了一些知名ip到地名查询提供商的数据,这些是他们官方的的准确率,经测试着实比纯真啥的准确多了。
每次聚合一下数据需要1-2天,会不定时更新。

2. 标准化的数据格式

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

只有中国的数据精确到了城市,其他国家只能定位到国家,后前的选项全部是0,已经包含了全部你能查到的大大小小的国家。

(请忽略前面的城市Id,个人项目需求)

3. 体积小

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

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

已经集成的客户端有:java, php, c,python,php扩展,nodejs,golang。

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

客户端/binary算法/b-tree算法/Memory算法:
java/0.x毫秒/0.x毫秒/0.1x毫秒 (使用RandomAccessFile)
php/0.x毫秒/0.1x毫秒/0.1x毫秒 (php扩展将有更快的速度)
c/0.0x毫秒/0.0x毫秒/0.00x毫秒(b-tree算法基本稳定在0.02x毫秒级别)
python/0.x毫秒/0.1x毫秒/0.1x毫秒

任何客户端b-tree都比binary算法快。

安装使用

1. 配置maven:

地址

<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>1.7.2</version>
</dependency>
2. nuget安装命令
Install-Package IP2Region
3. 测试程序

java:

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

php:

    php binding/php/testSearch ./data/ip2region.db

c:

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

均会看到如下界面:

initializing  B-tree ... 
+----------------------------------+
| ip2region test script |
| Author: chenxin619315@gmail.com |
| Type 'quit' to exit program |
+----------------------------------+
ip2region>>

输入ip地址开始测试,第一次会稍微有点慢,在运行命令后面接入binary,memory来尝试对应算法,建议使用b-tree算法,有速度和并发追求的使用memory算法。具体集成请参考不同客户端的测试源码。

其他

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

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

开源地址

GitHub:https://github.com/lionsoul2014/ip2region

贡献者

  • IT实战联盟-Line



全部评论: 0

    我有话说:

    Netbox 2.9.10 发布,IP 地址与数据中心管理工具

    NetBox 是一个 IP 地址管理(IP address management,IPAM)和数据中心基础设施管理(data center infrastructure management

    iOS实战篇:[译]iOS扩充--OCR光学字符识别(内附项目GitHub地址

    OCR(Optical Character Recognition) 光学字符识别, 是从图像中电子扫描提取文本过程, 可以在文档编辑等多种形式重用它,例如: 文本搜索/压缩等用途。

    iOS直播---主要概念(一)

    直播可谓风生水起, 热火朝天, 借此也对音视频进行一次深入学习, 希望有需要大家一块学习.第一步对直播

    iOS实战篇:iOS 界面卡顿原因

    界面卡顿原因在 VSync[1] 信号到来后,系统图形服务会通过 CADisplayLink 等机制通知 App,App 主线程开始在 CPU 中计算显示内容......

    Netbox 2.11.1 发布,IP 地址与数据中心管理工具

    NetBox 是一个 IP 地址管理(IP address management,IPAM)和数据中心基础设施管理(data center infrastructure management

    iOS TableView性能优化

    TableView性能优化非常考验开发基本功,之前做项目实战时候经常被这个问题困扰

    WeCube 2.7.1 发布,一站式 IT 架构管理和运维管理工具

    ,问题定位时间长等),在逐步解决这些痛点过程中,总...

    VUE 开源收藏版(一):史上最全面学习资源 ,附GitHub源码地址

    VUE 开源收藏版(一):史上最全面学习资源 ,附GitHub源码地址

    抖音品质建设 - iOS启动优化《原理篇》

    前言 启动是 App 给用户第一印象,启动越慢用户流失概率就越高,良好启动速度是用户体验不可缺少一环。启动优化涉及到知识点非常多面也很广,一篇文章难以包含全部,所以拆分成两部分:原理和实践

    iOS直播---音/视频采集/压缩(二)

    不好意思,我们来晚了! 但我们不会缺席。

    Angry IP Scanner 3.7.4 发布,IP、端口扫描工具

    Angry IP Scanner 是一款使用方便 IP、端口扫描工具。利用它,用户可以获得被扫描计算机 ping 响应时间、主机名称、计算机名称、工作组、登录用户名、MAC 地址、TTL

    开源推荐】基于 Go 语言轻量级高性能日志 logit使用及测评

    logit 是一个简单易用并且是基于级别控制日志,可以应用于所有 GoLang 应用程序中。

    VUE 开源收藏版(二):史上最全面学习资源 ,附GitHub源码地址

    最近做了一个Vue开源项目汇总,里面集合了OpenDigg 上优质Vue开源项目,方便移动开发人员便捷找到自己需要项目工具等,感兴趣可以到GitHub上给个star。

    DevEco Studio 2.0 Beta3 发布,HarmonyOS 配套 IDE

    12月16日,华为发布了 HarmonyOS 2.0 手机开发者 Beta 版。与此同时,作为手机开发者 Beta 版本配套 IDE,HUAWEI DevEco Studio 2.0 Beta3

    开源资讯」Guava 28.2 发布,Google Java 核心工具

    前言 Guava 28.2 发布了,Guava 是 Google 一个开源项目,包含许多 Google 核心 Java 常用,如:集合 [collections] 、缓存 [caching

    IP地址、子网掩码、网关等幽默解读

    故事写很生动 !文字比较多, 但是很值得用心读一遍假设你名字叫小不点....

    9种分布式ID生成方式,涨知识!

    https://www.toutiao.com/i6796536545537950211 一、为什么要用分布式ID? 在说分布式ID具体实现之前,我们来简单分析一下为什么用分布式ID?分布式ID

    Eclipse OpenJ9 v0.23.0 发布,Java 虚拟机

    Eclipse OpenJ9 v0.23.0 已发布,Eclipse OpenJ9 是 OpenJDK JVM,此 Java 虚拟机经过优化,具备占用空间小、启动速度快以及吞吐量高等优势。 新

    ECharts 5.0.1 发布,JavaScript 实现交互式图表可视化

    Apache ECharts (incubating) 5.0.1 已发布,ECharts 是一个使用 JavaScript 实现开源可视化,可以流畅运行在 PC 和移动设备上,兼容