<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一個(gè)還不錯(cuò)的離線 IP 地址定位庫(kù),99.9% 準(zhǔn)確率!

          共 3424字,需瀏覽 7分鐘

           ·

          2020-08-15 11:47

          來(lái)源:gitee.com/lionsoul/ip2region

          • Ip2region特性
          • ip2region快速測(cè)試
          • ip2region安裝
          • ip2region 并發(fā)使用
          • ip2region.db的生成

          ip2region - 準(zhǔn)確率99.9%的離線IP地址定位庫(kù),0.0x毫秒級(jí)查詢(xún),ip2region.db數(shù)據(jù)庫(kù)只有數(shù)MB,提供了java,php,c,python,nodejs,golang,c#等查詢(xún)綁定和Binary,B樹(shù),內(nèi)存三種查詢(xún)算法。

          Ip2region特性

          99.9%準(zhǔn)確率

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

          標(biāo)準(zhǔn)化的數(shù)據(jù)格式

          每條ip數(shù)據(jù)段都固定了格式:

          _城市Id|國(guó)家|區(qū)域|省份|城市|ISP_

          只有中國(guó)的數(shù)據(jù)精確到了城市,其他國(guó)家有部分?jǐn)?shù)據(jù)只能定位到國(guó)家,后前的選項(xiàng)全部是0,已經(jīng)包含了全部你能查到的大大小小的國(guó)家(請(qǐng)忽略前面的城市Id,個(gè)人項(xiàng)目需求)。

          體積小

          包含了全部的IP,生成的數(shù)據(jù)庫(kù)文件ip2region.db只有幾MB,最小的版本只有1.5MB,隨著數(shù)據(jù)的詳細(xì)度增加數(shù)據(jù)庫(kù)的大小也慢慢增大,目前還沒(méi)超過(guò)8MB。

          查詢(xún)速度快

          全部的查詢(xún)客戶(hù)端單次查詢(xún)都在0.x毫秒級(jí)別,內(nèi)置了三種查詢(xún)算法

          1. memory算法:整個(gè)數(shù)據(jù)庫(kù)全部載入內(nèi)存,單次查詢(xún)都在0.1x毫秒內(nèi),C語(yǔ)言的客戶(hù)端單次查詢(xún)?cè)?.00x毫秒級(jí)別。
          2. binary算法:基于二分查找,基于ip2region.db文件,不需要載入內(nèi)存,單次查詢(xún)?cè)?.x毫秒級(jí)別。
          3. b-tree算法:基于btree算法,基于ip2region.db文件,不需要載入內(nèi)存,單詞查詢(xún)?cè)?.x毫秒級(jí)別,比binary算法更快。

          任何客戶(hù)端b-tree都比binary算法快,當(dāng)然memory算法固然是最快的!

          多查詢(xún)客戶(hù)端的支持

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

          binding描述開(kāi)發(fā)狀態(tài)binary查詢(xún)耗時(shí)b-tree查詢(xún)耗時(shí)memory查詢(xún)耗時(shí)
          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實(shí)現(xiàn)的binding已完成0.x毫秒0.x毫秒0.x毫秒
          lua_clua的c擴(kuò)展已完成0.0x毫秒0.0x毫秒0.00x毫秒
          nginxnginx的c擴(kuò)展已完成0.0x毫秒0.0x毫秒0.00x毫秒
          nodejsnodejs已完成0.x毫秒0.x毫秒0.1x毫秒
          phpphp實(shí)現(xiàn)的binding已完成0.x毫秒0.1x毫秒0.1x毫秒
          php5_extphp5的c擴(kuò)展已完成0.0x毫秒0.0x毫秒0.00x毫秒
          php7_extphp7的c擴(kuò)展已完成0.0毫秒0.0x毫秒0.00x毫秒
          pythonpython bindng已完成0.x毫秒0.x毫秒0.x毫秒
          rustrust binding已完成0.x毫秒0.x毫秒0.x毫秒

          ip2region快速測(cè)試

          請(qǐng)參考每個(gè)binding下的README說(shuō)明去運(yùn)行cli測(cè)試程序,例如C語(yǔ)言的demo運(yùn)行如下:

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

          會(huì)看到如下cli界面:

          initializing??B-tree?...
          +----------------------------------+
          |?ip2region?test?script????????????|
          |?Author:?chenxin619315@gmail.com??|
          |?Type?'quit'?to?exit?program??????|
          +----------------------------------+
          p2region>>?101.105.35.57
          2163|中國(guó)|華南|廣東省|深圳市|鵬博士?in?0.02295?millseconds

          輸入IP地址開(kāi)始測(cè)試,第一次會(huì)稍微有點(diǎn)慢,在運(yùn)行命令后面接入binary,memory來(lái)嘗試其他算法,建議使用b-tree算法,速度和并發(fā)需求的可以使用memory算法,具體集成請(qǐng)參考不同binding下的測(cè)試源碼。

          ip2region安裝

          具體請(qǐng)參考每個(gè)binding下的README文檔和測(cè)試demo,以下是一些可用的快捷安裝方式:

          maven倉(cāng)庫(kù)地址


          ????org.lionsoul
          ????ip2region
          ????1.7.2

          nodejs

          npm?install?node-ip2region?--save

          nuget安裝

          Install-Package?IP2Region

          php composer

          #?插件來(lái)自:https://github.com/zoujingli/ip2region
          composer?require?zoujingli/ip2region

          ip2region 并發(fā)使用

          1. 全部binding的各個(gè)search接口都不是線程安全的實(shí)現(xiàn),不同線程可以通過(guò)創(chuàng)建不同的查詢(xún)對(duì)象來(lái)使用,并發(fā)量很大的情況下,binary和b-tree算法可能會(huì)打開(kāi)文件數(shù)過(guò)多的錯(cuò)誤,請(qǐng)修改內(nèi)核的最大允許打開(kāi)文件數(shù)(fs.file-max=一個(gè)更高的值),或者使用持久化的memory算法。
          2. memorySearch接口,在發(fā)布對(duì)象前進(jìn)行一次預(yù)查詢(xún)(本質(zhì)上是把ip2region.db文件加載到內(nèi)存),可以安全用于多線程環(huán)境。

          ip2region.db的生成

          從1.8版本開(kāi)始,ip2region開(kāi)源了ip2region.db生成程序的java實(shí)現(xiàn),提供了ant編譯支持,編譯后會(huì)得到以下提到的dbMaker-{version}.jar,對(duì)于需要研究生成程序的或者更改自定義生成配置的請(qǐng)參考${ip2region_root}/maker/java內(nèi)的java源碼。

          從ip2region 1.2.2版本開(kāi)始里面提交了一個(gè)dbMaker-{version}.jar的可以執(zhí)行jar文件,用它來(lái)完成這個(gè)工作:

          1. 確保你安裝好了java環(huán)境(不玩Java的童鞋就自己谷歌找找拉,臨時(shí)用一用,幾分鐘的事情)
          2. cd到${ip2region_root}/maker/java,然后運(yùn)行如下命令:
          java?-jar?dbMaker-{version}.jar?-src?文本數(shù)據(jù)文件?-region?地域csv文件?[-dst?生成的ip2region.db文件的目錄](méi)

          #?文本數(shù)據(jù)文件:db文件的原始文本數(shù)據(jù)文件路徑,自帶的ip2region.db文件就是/data/ip.merge.txt生成而來(lái)的,你可以換成自己的或者更改/data/ip.merge.txt重新生成
          #?地域csv文件:該文件目的是方便配置ip2region進(jìn)行數(shù)據(jù)關(guān)系的存儲(chǔ),得到的數(shù)據(jù)包含一個(gè)city_id,這個(gè)直接使用/data/origin/global_region.csv文件即可
          # ip2region.db文件的目錄:是可選參數(shù),沒(méi)有指定的話會(huì)在當(dāng)前目錄生成一份./data/ip2region.db文件
          獲取生成的ip2region.db文件覆蓋原來(lái)的ip2region.db文件即可
          瀏覽 97
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国内视频三区 | 苍井空一区二区在线观看 | 欧美一级激情 | 人人人人操 | 国产精品久久久久久亚洲毛片 |