IP查询 dat/db/xdb/mmdb 结构性能差异对比

IP Search Performance Tests

测试项目:qqzeng-ip
测试日期:2025-06-01
平台环境:macOS Sequoia 15.5 (24F74)
硬件配置:Apple M4 Max,1 CPU,14 Cores
运行时版本:.NET 10.0.0 (Arm64 RyuJIT AdvSIMD)
测试工具:BenchmarkDotNet v0.15.0

一、qqzeng-ip dat/db 性能测试

  • 📦 原始数据:qqzeng-ip.txt(150MB)
  • 📁 转换结果:qqzeng-ip.dat / qqzeng-ip.db(约 15~20MB)
  • 📌 项目地址:zengzhan/qqzeng-ip

✅ 随机单次查询性能

MethodMeanErrorStdDev
IPSearch2Test29.93 ns0.222 ns0.197 ns
IPSearch3Test17.50 ns0.251 ns0.222 ns
IPSearch6Test10.65 ns0.030 ns0.027 ns

MethodMeanErrorStdDev
IPSearch2Test29.85 ns0.298 ns0.279 ns
IPSearch3Test17.60 ns0.283 ns0.251 ns
IPSearch6Test10.55 ns0.062 ns0.055 ns

✅ 随机一百万个测试

MethodMeanErrorStdDev
IPSearch2Test97.85 ms0.976 ms0.762 ms
IPSearch3Test64.17 ms0.411 ms0.321 ms
IPSearch6Test31.37 ms0.615 ms0.921 ms

MethodMeanErrorStdDev
IPSearch2Test99.57 ms1.157 ms1.026 ms
IPSearch3Test64.42 ms0.133 ms0.118 ms
IPSearch6Test31.25 ms0.088 ms0.078 ms

🚀 随机亿级测试

方法总次时间每秒
qqzeng-ip-search-2.03900.00万4.18秒933.91万
qqzeng-ip-search-2.016400.00万17.29秒948.63万
qqzeng-ip-search-2.014300.00万15.11秒946.14万
qqzeng-ip-search-2.017400.00万17.54秒992.19万
qqzeng-ip-search-2.04200.00万4.25秒987.07万
qqzeng-ip-search-2.019300.00万20.11秒959.96万
qqzeng-ip-search-2.012600.00万13.31秒946.44万
qqzeng-ip-search-2.0600.00万0.64秒944.88万

方法总次时间每秒
qqzeng-ip-search-3.08800.00万5.93秒1483.98万
qqzeng-ip-search-3.017000.00万10.95秒1553.22万
qqzeng-ip-search-3.013500.00万8.67秒1556.73万
qqzeng-ip-search-3.06900.00万4.45秒1550.56万
qqzeng-ip-search-3.014700.00万9.44秒1557.70万
qqzeng-ip-search-3.01400.00万0.91秒1536.77万
qqzeng-ip-search-3.019400.00万12.47秒1555.61万
qqzeng-ip-search-3.019900.00万12.83秒1551.41万

方法总次时间每秒
qqzeng-ip-search-6.010800.00万3.68秒2935.58万
qqzeng-ip-search-6.011600.00万3.92秒2960.69万
qqzeng-ip-search-6.08100.00万2.67秒3028.04万
qqzeng-ip-search-6.011900.00万3.94秒3019.54万
qqzeng-ip-search-6.017500.00万5.68秒3080.99万
qqzeng-ip-search-6.010300.00万3.33秒3094.95万
qqzeng-ip-search-6.08100.00万2.63秒3078.68万
qqzeng-ip-search-6.015600.00万5.02秒3106.33万

结论:IPSearch6 性能最优,适合高并发大流量场景。单次查询最快,每秒处理能力最高。

二、qqzeng-ip xdb 性能测试

  • 📦 原始数据:qqzeng-ip.txt(126MB)
  • 📁 转换结果:qqzeng-ip.xdb(23.4MB)
  • 📌 项目地址:lionsoul2014/ip2region

🧪 官方 xdb 查询性能(纳秒级)

MethodMeanErrorStdDev
CachePolicy_Content45.37 ns0.250 ns0.234 ns
CachePolicy_File1,125.03 ns5.956 ns5.280 ns
CachePolicy_VectorIndex811.58 ns6.295 ns5.888 ns

MethodMeanErrorStdDev
CachePolicy_Content45.97 ns0.153 ns0.143 ns
CachePolicy_File1,132.85 ns5.087 ns4.758 ns
CachePolicy_VectorIndex778.37 ns4.698 ns3.923 ns

🔬 qqzeng-ip.xdb 查询性能(纳秒级)

MethodMeanErrorStdDev
CachePolicy_Content70.23 ns1.104 ns1.033 ns
CachePolicy_File1,521.94 ns7.233 ns6.412 ns
CachePolicy_VectorIndex1,139.11 ns2.684 ns2.380 ns

📊 千万级查询性能对比

方法总次时间每秒
CachePolicy_Content9100.00万14.49秒628.06万
CachePolicy_Content16400.00万25.27秒649.07万
CachePolicy_Content10200.00万14.60秒698.44万
CachePolicy_Content2600.00万3.79秒686.92万
CachePolicy_Content4400.00万6.37秒690.95万
CachePolicy_Content11100.00万15.87秒699.52万
CachePolicy_Content10400.00万15.05秒691.17万
CachePolicy_Content5400.00万7.80秒692.40万

方法总次时间每秒
CachePolicy_VectorIndex860.00万9.80秒87.74万
CachePolicy_VectorIndex1400.00万15.30秒91.50万
CachePolicy_VectorIndex1120.00万12.27秒91.28万
CachePolicy_VectorIndex1910.00万20.83秒91.69万
CachePolicy_VectorIndex1210.00万13.23秒91.44万
CachePolicy_VectorIndex1270.00万13.85秒91.72万
CachePolicy_VectorIndex1290.00万14.25秒90.55万
CachePolicy_VectorIndex950.00万10.48秒90.65万

方法总次时间每秒
CachePolicy_File370.00万5.70秒64.94万
CachePolicy_File200.00万2.94秒67.96万
CachePolicy_File1850.00万27.13秒68.20万
CachePolicy_File1520.00万22.31秒68.13万
CachePolicy_File760.00万11.16秒68.11万
CachePolicy_File1430.00万21.02秒68.03万
CachePolicy_File1720.00万25.55秒67.31万
CachePolicy_File230.00万3.45秒66.71万

结论:xdb 的 Content 缓存方式在速度与资源消耗之间取得了良好平衡。Content 缓存策略性能最佳;在保持兼容的基础上提升了查询速度。

三、qqzeng-ip mmdb 性能测试

🔎 单次查询性能(随机 IP)

MethodMeanErrorStdDev
Search1.766 us0.0054 us0.0050 us

MethodMeanErrorStdDev
Search829.1 ns2.45 ns2.29 ns

MethodMeanErrorStdDev
Search1.410 us0.0048 us0.0042 us

MethodMeanErrorStdDev
Search668.1 ns2.74 ns2.29 ns

🔎 千万级查询(MemoryMapped 模式)

使用 FileAccessMode.MemoryMapped(文件映射虚拟内存)

方法总次时间每秒
qqzeng-ip.mmdb8000.00万112.23秒71.28万
qqzeng-ip.mmdb5200.00万72.74秒71.49万
qqzeng-ip.mmdb2900.00万40.49秒71.61万
qqzeng-ip.mmdb6200.00万86.56秒71.62万
qqzeng-ip.mmdb1500.00万21.00秒71.42万
qqzeng-ip.mmdb6850.00万95.76秒71.53万
qqzeng-ip.mmdb1300.00万18.21秒71.37万
qqzeng-ip.mmdb6900.00万96.99秒71.14万

使用 FileAccessMode.Memory(加载至内存)

方法总次时间每秒
qqzeng-ip.mmdb1040.00万8.15秒127.56万
qqzeng-ip.mmdb540.00万4.00秒135.07万
qqzeng-ip.mmdb1730.00万12.51秒138.29万
qqzeng-ip.mmdb1440.00万10.44秒137.98万
qqzeng-ip.mmdb940.00万6.85秒137.31万
qqzeng-ip.mmdb720.00万5.21秒138.20万
qqzeng-ip.mmdb420.00万3.02秒139.26万
qqzeng-ip.mmdb1520.00万11.01秒138.06万

结论:mmdb 使用 Memory 模式性能显著提升,MemoryMapped 模式相对较慢但内存占用较少

📌 第四部分:总结

格式 对比 差异

数据格式文件大小单次查询(最快)每秒查询能力(最高)
dat/db~15M10 ns3100 万次/秒
xdb~23M70 ns690 万次/秒
mmdb~15M668 ns139 万次/秒

对比dat/dbxdbmmdb
索引结构效率高(位移+偏移表)中(字节+数组)较低(二进制树)
数据访问复杂度极低高(树遍历 + 解码)
是否结构化(需解码)否(纯字符串)否(定长字段)是(复杂字段结构)
是否序列化反序列化
是否涉及文件IO可配置视模式而定
是否为纯内存操作可选可选

结构数据结构查询机制查询速度加载方式每秒查询量
dat/db索引 + 偏移表指针偏移 + 内存查找纳微秒内存或 mmap3000 万+
xdb向量索引 + 数据区向量定位 + 字节读取几十~几百纳秒可配置缓存策略600~900 万
mmdb前缀树 + JSON树遍历 + 解码几百纳秒~微秒级内存或映射模式70~130 万

  • dat/db:结构紧凑,纯偏移访问,极致性能优化,无结构化处理。
  • xdb:向量定位简单,查询速度快,支持缓存优化,通用性好。
  • mmdb:前缀树结构复杂,需反序列化,适用于多字段、国际化场景。

qqzeng-ip 提供多种格式支持,满足不同平台和应用场景的性能需求 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值