IP Search Performance Tests dat/db/xdb/mmdb 结构性能差异对比

news2025/6/5 2:53:31

IP Search Performance Tests  

qqzeng-ip by 2025-06-01

测试环境:
BenchmarkDotNet v0.15.0  
macOS Sequoia 15.5 (24F74) [Darwin 24.5.0]  
Apple M4 Max, 1 CPU, 14 logical and 14 physical cores  
.NET SDK 10.0.100-preview.4.25258.110  
[Host]: .NET 10.0.0 (10.0.25.25910), Arm64 RyuJIT AdvSIMD

第一部分:
qqzeng-ip  dat/db 性能测试

源数据 qqzeng-ip.txt(150M)→ 转换生成 qqzeng-ip.dat/db(约15M~20M)  

项目地址:https://github.com/zengzhan/qqzeng-ip

随机单个测试

| Method        | Mean     | Error    | StdDev   |
|-------------- |---------:|---------:|---------:|
| IPSearch2Test | 29.93 ns | 0.222 ns | 0.197 ns |
| IPSearch3Test | 17.50 ns | 0.251 ns | 0.222 ns |
| IPSearch6Test | 10.65 ns | 0.030 ns | 0.027 ns |

| Method        | Mean     | Error    | StdDev   |
|-------------- |---------:|---------:|---------:|
| IPSearch2Test | 29.85 ns | 0.298 ns | 0.279 ns |
| IPSearch3Test | 17.60 ns | 0.283 ns | 0.251 ns |
| IPSearch6Test | 10.55 ns | 0.062 ns | 0.055 ns |


随机一百万个测试

| Method        | Mean     | Error    | StdDev   |
|-------------- |---------:|---------:|---------:|
| IPSearch2Test | 97.85 ms | 0.976 ms | 0.762 ms |
| IPSearch3Test | 64.17 ms | 0.411 ms | 0.321 ms |
| IPSearch6Test | 31.37 ms | 0.615 ms | 0.921 ms |

| Method        | Mean     | Error    | StdDev   |
|-------------- |---------:|---------:|---------:|
| IPSearch2Test | 99.57 ms | 1.157 ms | 1.026 ms |
| IPSearch3Test | 64.42 ms | 0.133 ms | 0.118 ms |
| IPSearch6Test | 31.25 ms | 0.088 ms | 0.078 ms |


随机亿级测试

|        方法           |        总次 |     时间 |    每秒  |
|--------------------- |-------------|---------|----------|
| qqzeng-ip-search-2.0 |   3900.00万 |   4.18秒 | 933.91万 |
| qqzeng-ip-search-2.0 |  16400.00万 |  17.29秒 | 948.63万 |
| qqzeng-ip-search-2.0 |  14300.00万 |  15.11秒 | 946.14万 |
| qqzeng-ip-search-2.0 |  17400.00万 |  17.54秒 | 992.19万 |
| qqzeng-ip-search-2.0 |   4200.00万 |   4.25秒 | 987.07万 |
| qqzeng-ip-search-2.0 |  19300.00万 |  20.11秒 | 959.96万 |
| qqzeng-ip-search-2.0 |  12600.00万 |  13.31秒 | 946.44万 |
| qqzeng-ip-search-2.0 |    600.00万 |   0.64秒 | 944.88万 |

|        方法           |        总次 |     时间 |    每秒   |
|--------------------- |-------------|---------|----------|
| qqzeng-ip-search-3.0 |   8800.00万 |   5.93秒 | 1483.98万 |
| qqzeng-ip-search-3.0 |  17000.00万 |  10.95秒 | 1553.22万 |
| qqzeng-ip-search-3.0 |  13500.00万 |   8.67秒 | 1556.73万 |
| qqzeng-ip-search-3.0 |   6900.00万 |   4.45秒 | 1550.56万 |
| qqzeng-ip-search-3.0 |  14700.00万 |   9.44秒 | 1557.70万 |
| qqzeng-ip-search-3.0 |   1400.00万 |   0.91秒 | 1536.77万 |
| qqzeng-ip-search-3.0 |  19400.00万 |  12.47秒 | 1555.61万 |
| qqzeng-ip-search-3.0 |  19900.00万 |  12.83秒 | 1551.41万 |

|        方法           |        总次 |     时间 |    每秒   |
|--------------------- |-------------|---------|----------|
| qqzeng-ip-search-6.0 |  10800.00万 |   3.68秒 | 2935.58万 |
| qqzeng-ip-search-6.0 |  11600.00万 |   3.92秒 | 2960.69万 |
| qqzeng-ip-search-6.0 |   8100.00万 |   2.67秒 | 3028.04万 |
| qqzeng-ip-search-6.0 |  11900.00万 |   3.94秒 | 3019.54万 |
| qqzeng-ip-search-6.0 |  17500.00万 |   5.68秒 | 3080.99万 |
| qqzeng-ip-search-6.0 |  10300.00万 |   3.33秒 | 3094.95万 |
| qqzeng-ip-search-6.0 |   8100.00万 |   2.63秒 | 3078.68万 |
| qqzeng-ip-search-6.0 |  15600.00万 |   5.02秒 | 3106.33万 |

IPSearch6 性能最优,单次查询最快,每秒处理能力最高

第二部分:
qqzeng-ip  xdb 性能测试

源数据 qqzeng-ip.txt(126M)→ 转换生成 qqzeng-ip.xdb(23.4M)  

项目地址:https://github.com/lionsoul2014/ip2region

原始官方 xdb 数据查询性能(纳秒):

| Method                  | Mean        | Error    | StdDev   |
|------------------------ |------------:|---------:|---------:|
| CachePolicy_Content     |    45.37 ns | 0.250 ns | 0.234 ns |
| CachePolicy_File        | 1,125.03 ns | 5.956 ns | 5.280 ns |
| CachePolicy_VectorIndex |   811.58 ns | 6.295 ns | 5.888 ns |

| Method                  | Mean        | Error    | StdDev   |
|------------------------ |------------:|---------:|---------:|
| CachePolicy_Content     |    45.97 ns | 0.153 ns | 0.143 ns |
| CachePolicy_File        | 1,132.85 ns | 5.087 ns | 4.758 ns |
| CachePolicy_VectorIndex |   778.37 ns | 4.698 ns | 3.923 ns |


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

| Method                  | Mean        | Error    | StdDev   |
|------------------------ |------------:|---------:|---------:|
| CachePolicy_Content     |    70.23 ns | 1.104 ns | 1.033 ns |
| CachePolicy_File        | 1,521.94 ns | 7.233 ns | 6.412 ns |
| CachePolicy_VectorIndex | 1,139.11 ns | 2.684 ns | 2.380 ns |


| 方法                 |        总次 |     时间 |     每秒 |
| CachePolicy_Content  |   9100.00万 |  14.49秒 | 628.06万 |
| CachePolicy_Content  |  16400.00万 |  25.27秒 | 649.07万 |
| CachePolicy_Content  |  10200.00万 |  14.60秒 | 698.44万 |
| CachePolicy_Content  |   2600.00万 |   3.79秒 | 686.92万 |
| CachePolicy_Content  |   4400.00万 |   6.37秒 | 690.95万 |
| CachePolicy_Content  |  11100.00万 |  15.87秒 | 699.52万 |
| CachePolicy_Content  |  10400.00万 |  15.05秒 | 691.17万 |
| CachePolicy_Content  |   5400.00万 |   7.80秒 | 692.40万 |

| 方法                 |        总次 |     时间 |     每秒 |
| CachePolicy_VectorIndex |    860.00万 |   9.80秒 |  87.74万 |
| CachePolicy_VectorIndex |   1400.00万 |  15.30秒 |  91.50万 |
| CachePolicy_VectorIndex |   1120.00万 |  12.27秒 |  91.28万 |
| CachePolicy_VectorIndex |   1910.00万 |  20.83秒 |  91.69万 |
| CachePolicy_VectorIndex |   1210.00万 |  13.23秒 |  91.44万 |
| CachePolicy_VectorIndex |   1270.00万 |  13.85秒 |  91.72万 |
| CachePolicy_VectorIndex |   1290.00万 |  14.25秒 |  90.55万 |
| CachePolicy_VectorIndex |    950.00万 |  10.48秒 |  90.65万 |

| 方法                 |        总次 |     时间 |     每秒 |
| CachePolicy_File     |    370.00万 |   5.70秒 |  64.94万 |
| CachePolicy_File     |    200.00万 |   2.94秒 |  67.96万 |
| CachePolicy_File     |   1850.00万 |  27.13秒 |  68.20万 |
| CachePolicy_File     |   1520.00万 |  22.31秒 |  68.13万 |
| CachePolicy_File     |    760.00万 |  11.16秒 |  68.11万 |
| CachePolicy_File     |   1430.00万 |  21.02秒 |  68.03万 |
| CachePolicy_File     |   1720.00万 |  25.55秒 |  67.31万 |
| CachePolicy_File     |    230.00万 |   3.45秒 |  66.71万 |

Content 缓存策略性能最佳;qqzeng-ip.xdb 在保持兼容的基础上提升了查询速度

第三部分:
qqzeng-ip  mmdb 性能测试

源数据 qqzeng-ip.csv(168M)→ 转换生成 qqzeng-ip.mmdb(14.9M)  

项目地址:
https://github.com/maxmind/mmdbwriter
https://github.com/maxmind/MaxMind-DB-Reader-dotnet

随机单个性能

| Method | Mean     | Error     | StdDev    |
|------- |---------:|----------:|----------:|
| Search | 1.766 us | 0.0054 us | 0.0050 us |

| Method | Mean     | Error   | StdDev  |
|------- |---------:|--------:|--------:|
| Search | 829.1 ns | 2.45 ns | 2.29 ns |

| Method | Mean     | Error     | StdDev    |
|------- |---------:|----------:|----------:|
| Search | 1.410 us | 0.0048 us | 0.0042 us |

| Method | Mean     | Error   | StdDev  |
|------- |---------:|--------:|--------:|
| Search | 668.1 ns | 2.74 ns | 2.29 ns |


随机千万级

FileAccessMode.MemoryMapped 文件映射到虚拟内存

| 方法                 |        总次 |     时间 |     每秒 |
| qqzeng-ip.mmdb       |   8000.00万 | 112.23秒 |  71.28万 |
| qqzeng-ip.mmdb       |   5200.00万 |  72.74秒 |  71.49万 |
| qqzeng-ip.mmdb       |   2900.00万 |  40.49秒 |  71.61万 |
| qqzeng-ip.mmdb       |   6200.00万 |  86.56秒 |  71.62万 |
| qqzeng-ip.mmdb       |   1500.00万 |  21.00秒 |  71.42万 |
| qqzeng-ip.mmdb       |   6850.00万 |  95.76秒 |  71.53万 |
| qqzeng-ip.mmdb       |   1300.00万 |  18.21秒 |  71.37万 |
| qqzeng-ip.mmdb       |   6900.00万 |  96.99秒 |  71.14万 |

FileAccessMode.Memory  文件加载到实际内存

| 方法                 |        总次 |     时间 |     每秒 |
| qqzeng-ip.mmdb       |   1040.00万 |   8.15秒 | 127.56万 |
| qqzeng-ip.mmdb       |    540.00万 |   4.00秒 | 135.07万 |
| qqzeng-ip.mmdb       |   1730.00万 |  12.51秒 | 138.29万 |
| qqzeng-ip.mmdb       |   1440.00万 |  10.44秒 | 137.98万 |
| qqzeng-ip.mmdb       |    940.00万 |   6.85秒 | 137.31万 |
| qqzeng-ip.mmdb       |    720.00万 |   5.21秒 | 138.20万 |
| qqzeng-ip.mmdb       |    420.00万 |   3.02秒 | 139.26万 |
| qqzeng-ip.mmdb       |   1520.00万 |  11.01秒 | 138.06万 |

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


第四部分:

格式 对比 差异

| 数据格式 | 文件大小 | 单次查询(最快) | 每秒查询能力(最高) |
|----------|----------|------------------|------------------------|
| dat/db   | ~15M     | 10 ns            | 3100 万次/秒          |
| xdb      | ~23M     | 70 ns            | 690 万次/秒           |
| mmdb     | ~15M     | 668 ns           | 139 万次/秒           |


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

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


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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2396687.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenRouter使用指南

OpenRouter 是一个专注于大模型(LLM)API 聚合和路由的服务平台,旨在帮助开发者便捷地访问多种主流大语言模型(如 GPT-4、Claude、Llama 等),并提供统一的接口、成本优化和智能路由功能。以下是它的核心功能…

【优选算法 | 队列 BFS】构建搜索流程的核心思维

算法相关知识点可以通过点击以下链接进行学习一起加油!双指针滑动窗口二分查找前缀和位运算模拟链表哈希表字符串模拟栈模拟(非单调栈)优先级队列 很多人学 BFS 的时候都知道“用队列”,但为什么一定是队列?它到底在整个搜索流程中起了什么作…

设计模式(行为型)-中介者模式

目录 定义 类图结构展示 角色职责详解 模式的优缺点分析 优点 缺点 适用场景 应用实例 与其他模式的结合与拓展 总结 定义 中介者模式的核心思想可以概括为:用一个中介对象来封装一系列的对象交互。这个中介者就像一个通信枢纽,使各对象不需要…

【Java学习笔记】异常

异常(Exception) 一、基本介绍 在 Java 程序中,将运行中发生的不正常情况称为 “异常”,开发过程中的语法错误和运行时发生的异常情况是不一样的。 二、异常的分类 1. Error(错误):Java 虚拟…

MySQL:视图+用户管理+访问+连接池原理

一、视图 视图是一个虚拟表,其内容由查询定义。同真实的表一样(相当于是把查询的内容当成一个临时表来使用),视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。 1.1 为…

neo4j 5.19.0安装、apoc csv导入导出 及相关问题处理

前言 突然有需求需要用apoc 导入 低版本的图谱数据,网上资料又比较少,所以就看官网资料并处理了apoc 导入的一些问题。 相关地址 apoc 官方安装网址 apoc 官方导出csv 教程地址 apoc 官方 导入 csv 地址 docker 安装 执行如下命令启动镜像 doc…

无人机桥梁3D建模的拍摄频率

无人机桥梁3D建模的拍摄频率 无人机桥梁3D建模的拍摄频率(每秒拍摄照片数)需根据建模精度、飞行速度、相机性能等因素综合确定。以下是专业级作业的详细参数分析: 1. 核心计算公式 拍摄频率(fps) \frac{飞行速度&…

ESP32-idf学习(三)esp32C3连接iot

一、前言 上一篇用蓝牙作为通信方式,虽然勉强完成了控制,但结果显然不是那么符合我们的预期,既然用蓝牙还需要研究一段时间,那我们就先整一些现成的,不需要研究的!iot云平台!这里当然也是通过w…

详解鸿蒙仓颉开发语言中的计时器

今天又到了大家喜闻乐见的科普环节,也可以说是踩坑环节,哈哈哈。今天聊一聊仓颉开发语言中的计时器,这部分可老有意思了。 为什么这么说呢,因为关于仓颉的计时器你几乎搜不到任何的文档,也没有相关的代码提示&#xf…

【计算机网络】第3章:传输层—拥塞控制原理

目录 一、PPT 二、总结 (一)拥塞的定义 (二)拥塞产生的原因 (三)拥塞控制的目标 (四)拥塞控制方法分类 1. 端到端拥塞控制 2. 网络辅助拥塞控制 (五)…

Vue3(watch,watchEffect,标签中ref的使用,TS,props,生命周期)

Vue3(watch,watchEffect,标签中ref的使用,TS,props,生命周期) watch监视 情况三:监视reactive定义的对象类型的数据 监视reactive定义的对象类型的数据,默认开启深度监视。地址没变,新值和旧…

【nssctf第三题】[NSSCTF 2022 Spring Recruit]easy C

这是题目&#xff0c;下载附件打开是个C文件 #include <stdio.h> #include <string.h>int main(){char a[]"wwwwwww";char b[]"dvxbQd";//try to find out the flagprintf("please input flag:");scanf(" %s",&a);if…

DBeaver导入/导出数据库时报错解决方案

导出&#xff1a; 报错&#xff1a;mysqldump: Got error: 2026: SSL connection error: error:0A000102:SSL routines::unsupported protocol when trying to connect 在额外的命令参数中添加"--ssl-modeDISABLED"可以关闭SSL服务&#xff0c;从而成功解决问题。这…

uniapp与微信小程序开发平台联调无法打开IDE

经测试属于网络问题。本机需要联网。否则会出现Hbuilder运行微信小程序到模拟器时无法打开 微信开发者工具 这个页面出不来会一直显示异常。这期间微信小程序开发工具的端口是通的 需要先联网

第十二节:第五部分:集合框架:Set集合的特点、底层原理、哈希表、去重复原理

Set系列集合特点 哈希值 HashSet集合的底层原理 HashSet集合去重复 代码 代码一&#xff1a;整体了解一下Set系列集合的特点 package com.itheima.day20_Collection_set;import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; import java.util.…

【C++项目】:仿 muduo 库 One-Thread-One-Loop 式并发服务器

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;C从入门到精通 目录 &#x1f525; 前言 一&#xff1a;&#x1f525; 项目储备知识 &#x1f98b; HTTP 服务器&#x1f98b; Reactor 模型&#x1f380; 单 Reactor 单线程&#xff1a;单I/O多路…

基于大数据的个性化购房推荐系统设计与实现(源码+定制+开发)面向房产电商的智能购房推荐与数据可视化系统 基于Spark与Hive的房源数据挖掘与推荐系统设计

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

FFmpeg学习笔记

1. 播放器的架构 2. 播放器的渲染流程 3. ffmpeg下载与安装 3.0 查看PC是否已经安装了ffmpeg ffmpeg 3.1 下载 wget https://ffmpeg.org/releases/ffmpeg-7.0.tar.gz 3.2 解压 tar zxvf ffmpeg-7.0.tar.gz && cd ./ffmpeg-7.0 3.3 查看配置文件 ./configure …

Chrome 通过FTP,HTTP 调用 Everything 浏览和搜索本地文件系统

【提问1】 Chrome调用本地 everything.exe, everything 好像有本地 FTP 服务器&#xff1f; 【DeepSeek R1 回答】 是的&#xff0c;Everything 确实内置了 HTTP/FTP 服务器功能&#xff0c;这提供了一种相对安全的浏览器与本地应用交互的方式。以下是完整的实现方案&#x…

GpuGeek如何成为AI基础设施市场的中坚力量

AI时代&#xff0c;算力基础设施已成为支撑技术创新和产业升级的关键要素。作为国内专注服务算法工程师群体的智算平台&#xff0c;GpuGeek通过持续创新的服务模式、精准的市场定位和系统化的生态建设&#xff0c;正快速成长为AI基础设施领域的中坚力量。本文将深入分析GpuGeek…