技术方向

Ip2region

技术方向 数据处理
Nuget Ip2region
访问数 1879
来源 GitHub
开源协议 MIT
星星数 9800
发布时间 2021-12-08 09:59:13

C#.Net下的GitHub开源库IP2region是一个准确率达到99.9%的离线IP地址定位库,0.0x毫秒级查询,其数据库文件ip2region.db只有数MB,提供了java,php,c,python,nodejs,golang,c#等语言查询绑定和Binary,B树,内存三种查询算法。
返回的数据结果是标准化的固定格式,如:_城市Id|国家|区域|省份|城市|ISP_
最新的IP信息定位文件数据库更新在1月前。


内置的三种查询算法
1、memory算法:整个数据库全部载入内存,单次查询都在0.1x毫秒内。
2、binary算法:基于二分查找,基于ip2region.db文件,不需要载入内存,单次查询在0.x毫秒级别。
3、b-tree算法:基于btree算法,基于ip2region.db文件,不需要载入内存,单词查询在0.x毫秒级别,比binary算法更快。


C#.Net下的使用示例
创建一个.NetCore控制台测试项目后,通过Nuget安装Install-Package IP2Region
拷贝最新的ip2region.db(github目录下有已经生成的数据库)数据库文件到程序指定目录下,创建一个DbSearcher

using (var search = new DbSearcher(Environment.CurrentDirectory + @"\ip2region.db"))
{
    string memorySearchRegion = search.MemorySearch("180.101.49.11").Region;
    Console.WriteLine($"MemorySearch:{memorySearchRegion}");

    string binarySearch = search.BinarySearch("180.101.49.11").Region;
     Console.WriteLine($"BinarySearch:{binarySearch}");

    string btreeSearch = search.BtreeSearch("180.101.49.11").Region;
    Console.WriteLine($"BtreeSearch:{btreeSearch}");
}

输出结果如下


从输出结果反馈看到BtreeSearch返回了乱码,其它两种算法是正常的,查找了Issues反馈是C#下的BtreeSearch确实返回了乱码,目前并没有修复。个人建议直接用内存MemorySearch方式查找,因为整个数据库并不大。


注意:接口实现并不是线程安全。

频道专栏
推荐源码