開源:推薦一個不錯的離線IP位址定位庫

編程程序員dd 發佈 2020-07-17T15:17:01+00:00

來源 | https://gitee.com/lionsoul/ip2regionip2region - 準確率99.9%的離線IP位址定位庫,0.0x毫秒級查詢,ip2region.

來源 | https://gitee.com/lionsoul/ip2region

ip2region - 準確率99.9%的離線IP位址定位庫,0.0x毫秒級查詢,ip2region.db資料庫只有數MB,提供了java,php,c,python,nodejs,golang,c#等查詢綁定和Binary,B樹,內存三種查詢算法。

Ip2region特性

99.9%準確率

數據聚合了一些知名ip到地名查詢提供商的數據,這些是他們官方的的準確率,經測試著實比經典的純真IP定位準確一些。ip2region的數據聚合自以下服務商的開放API或者數據(升級程序每秒請求次數2到4次): 01, >80%, 淘寶IP位址庫, http://ip.taobao.com/ 02, ≈10%, GeoIP, https://geoip.com/ 03, ≈2%, 純真IP庫, http://www.cz88.net/ **備註:**如果上述開放API或者數據都不給開放數據時ip2region將停止數據的更新服務。

標準化的數據格式

每條ip數據段都固定了格式:

_城市Id|國家|區域|省份|城市|ISP_

只有中國的數據精確到了城市,其他國家有部分數據只能定位到國家,後前的選項全部是0,已經包含了全部你能查到的大大小小的國家(請忽略前面的城市Id,個人項目需求)。

體積小

包含了全部的IP,生成的資料庫文件ip2region.db只有幾MB,最小的版本只有1.5MB,隨著數據的詳細度增加資料庫的大小也慢慢增大,目前還沒超過8MB。

查詢速度快

全部的查詢客戶端單次查詢都在0.x毫秒級別,內置了三種查詢算法

  1. memory算法:整個資料庫全部載入內存,單次查詢都在0.1x毫秒內,C語言的客戶端單次查詢在0.00x毫秒級別。
  2. binary算法:基於二分查找,基於ip2region.db文件,不需要載入內存,單次查詢在0.x毫秒級別。
  3. b-tree算法:基於btree算法,基於ip2region.db文件,不需要載入內存,單詞查詢在0.x毫秒級別,比binary算法更快。

任何客戶端b-tree都比binary算法快,當然memory算法固然是最快的!

多查詢客戶端的支持

已經集成的客戶端有:java、C#、php、c、python、nodejs、php擴展(php5和php7)、golang、rust、lua、lua_c, nginx。

binding描述開發狀態binary查詢耗時b-tree查詢耗時memory查詢耗時cANSC c binding已完成0.0x毫秒0.0x毫秒0.00x毫秒c#c# binding已完成0.x毫秒0.x毫秒0.1x毫秒golanggolang binding已完成0.x毫秒0.x毫秒0.1x毫秒javajava binding已完成0.x毫秒0.x毫秒0.1x毫秒lualua實現的binding已完成0.x毫秒0.x毫秒0.x毫秒lua_clua的c擴展已完成0.0x毫秒0.0x毫秒0.00x毫秒nginxnginx的c擴展已完成0.0x毫秒0.0x毫秒0.00x毫秒nodejsnodejs已完成0.x毫秒0.x毫秒0.1x毫秒phpphp實現的binding已完成0.x毫秒0.1x毫秒0.1x毫秒php5_extphp5的c擴展已完成0.0x毫秒0.0x毫秒0.00x毫秒php7_extphp7的c擴展已完成0.0毫秒0.0x毫秒0.00x毫秒pythonpython bindng已完成0.x毫秒0.x毫秒0.x毫秒rustrust binding已完成0.x毫秒0.x毫秒0.x毫秒

ip2region快速測試

請參考每個binding下的README說明去運行cli測試程序,例如C語言的demo運行如下:

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

會看到如下cli介面:

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

輸入IP位址開始測試,第一次會稍微有點慢,在運行命令後面接入binary,memory來嘗試其他算法,建議使用b-tree算法,速度和並發需求的可以使用memory算法,具體集成請參考不同binding下的測試源碼。

ip2region安裝

具體請參考每個binding下的README文檔和測試demo,以下是一些可用的快捷安裝方式:

maven倉庫地址

<dependency>
    <groupId>org.lionsoul</groupId>
    <artifactId>ip2region</artifactId>
    <version>1.7.2</version>
</dependency>

nodejs

npm install node-ip2region --save

nuget安裝

Install-Package IP2Region

php composer

# 插件來自:https://github.com/zoujingli/ip2region
composer require zoujingli/ip2region

ip2region 並發使用

  1. 全部binding的各個search接口都不是線程安全的實現,不同線程可以通過創建不同的查詢對象來使用,並發量很大的情況下,binary和b-tree算法可能會打開文件數過多的錯誤,請修改內核的最大允許打開文件數(fs.file-max=一個更高的值),或者使用持久化的memory算法。
  2. memorySearch接口,在發布對象前進行一次預查詢(本質上是把ip2region.db文件加載到內存),可以安全用於多線程環境。

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. 獲取生成的ip2region.db文件覆蓋原來的ip2region.db文件即可
  2. 默認的ip2region.db文件生成命令:
cd ${ip2region_root}/java/
java -jar dbMaker-1.2.2.jar -src ./data/ip.merge.txt -region ./data/global_region.csv

# 會看到一大片的輸出


最後

剛整理 2020 年全套最新精品技術資料免費發給你! (原價最少8999元,超2000G!)

領取 看看下面!!

1、點讚 + 評論 (勾選 「轉發」 )

2、關注小編私信。點擊頭像,關注。並私信回復關鍵詞: 1024


關鍵字: