準確率99.9%的ip地址定位庫,0.0x毫秒級查詢,資料庫檔案大小只有1.5M,提供了java,PHP,c,python,nodejs,golang,c#查詢系結和Binary,B樹,記憶體三種查詢演算法,媽媽再也不用擔心我的ip地址定位! http://gitee.com/lionsoul/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, C#, php, c, python,nodejs,php擴展(支持linux, php5, php7版本已支持),golang。
提供了兩種查詢演算法,回應時間如下:
客戶端/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毫秒/未知
任何客戶端b-tree都比binary演算法快,當然Memory演算法固然是最快的!
maven倉庫地址:
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>1.4</version>
</dependency>
nuget安裝命令
Install-Package IP2Region
5. 測驗程式:
c#:
cd IP2Region_ConsoleTest
dotnet run
example result:
請輸入IP地址:
36.149.160.55
node:
> let ip2region = require('./ip2region.js');
> let dbService = ip2region.create('./ip2region.db');
> dbService.binarySearchSync(' 101.105.35.57')
{ city: 0, region: '中國|0|廣東|深圳|鵬博士' }
java:
cd binding/java
ant all
java -jar ip2region-{version}.jar ./data/ip2region.db
php:
php binding/php/testSearcher.php ./data/ip2region.db
c:
cd binding/c/
gcc -g -O2 testSearcher.c ip2region.c
./a.out ../../data/ip2region.db
python:
python binding/python/testSearcher.py ./data/ip2region.db
均會看到如下界面:
initializing B-tree ...
+----------------------------------+
| ip2region test script |
| Author: [email protected] |
| Type 'quit' to exit program |
+----------------------------------+
p2region>> 101.105.35.57
2163|中國|華南|廣東省|深圳市|鵬博士 in 0.02295 millseconds
輸入ip地址開始測驗,第一次會稍微有點慢,在運行命令后面接入binary,memory來嘗試其他演算法,建議使用b-tree演算法,速度和并發需求的可以使用memory演算法。
具體集成請參考不同客戶端的測驗原始碼。
6. 如何生成ip2region.db檔案
從ip2region 1.2.2版本開始里面提交了一個dbMaker-{version}.jar的可以執行jar檔案,用它來完成這個作業:
1, 確保你安裝好了java環境(不玩Java的童鞋就自己谷歌找找拉,臨時用一用,幾分鐘的事情)
2, cd到ip2region的根目錄,然后運行如下命令:
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檔案
3, 獲取生成的ip2region.db檔案覆寫原來的ip2region.db檔案即可
4, 默認的ip2region.db檔案生成命令:
cd ip2region專案根目錄
java -jar dbMaker-1.2.2.jar -src ./data/ip.merge.txt -region ./data/global_region.csv
# 會看到一大片的輸出
5, 資料庫檔案的結構和原理請閱讀 @冬芽 的blog:“ip2region資料庫檔案的結構和原理”
uj5u.com熱心網友回復:
自動定位ip轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/269390.html
標籤:其他技術討論專區
下一篇:藍橋杯 帶分數 python實作
