ip2region - 是一個離線IP位址定位庫和IP定位資料管理框架,10微秒層級的查詢效率,提供了眾多主流程式語言的xdb
資料產生和查詢客戶端實作。
xdb
支援億級的IP 資料段行數,預設的region 資訊都固定了格式:国家|区域|省份|城市|ISP
,缺省的地域資訊預設是0。 region 資訊支援完全自訂,例如:你可以在region 中追加特定業務需求的數據,例如:GPS資訊/國際統一地域資訊編碼/郵遞區號等。也就是你完全可以使用ip2region 來管理你自己的IP 定位資料。
xdb
格式產生程式會自動去重和壓縮部分數據,預設的全部IP 數據,產生的ip2region.xdb 資料庫是11MiB,隨著資料的詳細度增加資料庫的大小也慢慢增加。
即使是完全基於xdb
檔案的查詢,單次查詢回應時間在十微秒級別,可透過以下兩種方式開啟記憶體加速查詢:
vIndex
索引快取:使用固定的512KiB
的記憶體空間快取vector index 數據,減少一次IO 磁碟操作,保持平均查詢效率穩定在10-20微秒之間。xdb
整個檔案快取:將整個xdb
檔案全部載入到內存,記憶體佔用等同於xdb
檔案大小,無磁碟IO 操作,保持微秒的查詢效率。xdb
資料查詢API 介紹,使用文件和測試程式請參考對應searcher
查詢客戶端下的ReadMe 介紹,全部查詢binding 實作如下:
Ok? | 狀態 | 程式設計語言 | 描述 | 貢獻者 |
---|---|---|---|---|
✅ | 已完成 | golang | golang xdb 查詢客戶端實現 | Lion |
✅ | 已完成 | php | php xdb 查詢客戶端實現 | Lion |
✅ | 已完成 | java | java xdb 查詢客戶端實現 | Lion |
✅ | 已完成 | lua | 純lua xdb 查詢客戶端實現 | Lion |
✅ | 已完成 | c | ANSC c xdb 查詢客戶端實現 | Lion |
✅ | 已完成 | lua_c | lua c 擴充xdb 查詢客戶端實現 | Lion |
✅ | 已完成 | rust | rust xdb 查詢客戶端實現 | gongzhengyang |
✅ | 已完成 | Python直譯 | python xdb 查詢客戶端實現 | 厲害的花花 |
✅ | 已完成 | nodejs | nodejs xdb 查詢客戶端實現 | Wu Jian Ping |
✅ | 已完成 | csharp | csharp xdb 查詢客戶端實現 | Alen Lee |
✅ | 已完成 | erlang | erlang xdb 查詢客戶端實現 | leihua996 |
待開始 | php_ext | php c 擴充xdb 查詢客戶端實現 | 待確定 | |
✅ | 已完成 | nginx | nginx 擴充xdb 查詢客戶端實現 | Wu Jian Ping |
✅ | 已完成 | C++ | C++ xdb 查詢客戶端實現 | Yunbin Liu |
以下工具鏈實現由社群開發者透過第三方倉庫貢獻:
Ok? | 狀態 | 程式設計語言 | 描述 | 貢獻者 |
---|---|---|---|---|
✅ | 已完成 | ruby-ip2region | ruby xdb 查詢客戶端實現 | jicheng1014 |
✅ | 已完成 | Ip2regionTool | ip2region資料轉換工具 | orestonce |
xdb
資料生成API 介紹,使用文件和測試程式請參考如下maker
產生程式下的ReadMe 文件:
Ok? | 狀態 | 程式設計語言 | 描述 | 貢獻者 |
---|---|---|---|---|
✅ | 已完成 | golang | golang xdb 生成程式實現 | Lion |
✅ | 已完成 | java | java xdb 生成程式實現 | Lion |
待開始 | c | ANSC c xdb 生成程式實現 | Lion | |
✅ | 已完成 | Python直譯 | python xdb 生成程式實現 | leolin49 |
✅ | 已完成 | csharp | csharp xdb 生成程式實現 | Alan Lee |
✅ | 已完成 | rust | rust xdb 生成程式實現 | KevinWang |
✅ | 已完成 | C++ | C++ xdb 生成程式實現 | Yunbin Liu |
xdb
資料更新ip2region 旨在於研究IP 資料的儲存和快速查詢的設計和實現,並沒有原始IP 資料的支撐,也不會有商用版本。 本專案的自帶的./data/ip.merge.txt
原始資料已經很久沒有更新,也不會再更新,對於資料精度和更新頻率要求很高的使用場景建議購買第三方商用數據,你可以使用以下幾種方式來嘗試自己更新資料:
你可以基於ip2region 自帶的./data/ip.merge.txt
原始IP 資料用ip2region 提供的編輯工具來自行修改,目前資料來源有以下幾種方式:
[数据源补充]
標籤的Issue原始IP 資料編輯工具使用方法請參考如下的maker
產生程式下的ReadMe 文件:
Ok? | 狀態 | 程式設計語言 | 描述 | 貢獻者 |
---|---|---|---|---|
✅ | 已完成 | golang | golang 原始IP 資料編輯器 | Lion |
待開始 | java | java 原始IP 資料編輯器 | Lion | |
✅ | 已完成 | C++ | C++ 原始IP 資料編輯器 | Yunbin Liu |
如果你想透過你自己的API 或資料來源來更新數據,你可以參考以下影片分享的基于检测算法
的更新演算法來自己編寫一個更新程式:
xdb 整個快取的查詢都是並發安全的,基於文件的查詢都不是並發安全的實現,不同進程/線程/協程需要透過創建不同的查詢對象來安全使用,並發量很大的情況下,基於文件查詢的方式可能會導致開啟檔案數過多的錯誤,請修改核心的最大允許開啟檔案數(fs.file-max=一個較高的值),或將整個xdb載入到記憶體進行安全並發使用。
請先關注微信公眾號lionsoul-org (獅子的魂)