IP Search Performance Tests dat/db/xdb/mmdb 结构性能差异对比
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 提供多种格式支持,满足不同平台和应用场景的性能需求 。
相关文章:
IP Search Performance Tests dat/db/xdb/mmdb 结构性能差异对比
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…...

OpenRouter使用指南
OpenRouter 是一个专注于大模型(LLM)API 聚合和路由的服务平台,旨在帮助开发者便捷地访问多种主流大语言模型(如 GPT-4、Claude、Llama 等),并提供统一的接口、成本优化和智能路由功能。以下是它的核心功能…...
Linux 中 m、mm、mmm 函数和 make 的区别
在 Linux 内核开发和 Android 开发中,构建系统通常使用 make 命令来编译和构建项目。而在 Android 开发环境中,还有 m、mm 和 mmm 等命令,这些命令是 Android 构建系统的一部分,提供了更高效和便捷的构建方式。以下将详细介绍这些…...
【MAC】YOLOv8/11/12 转换为 CoreML 格式并实现实时目标检测
在本文中,我们将详细介绍如何将 YOLOv8/11/12 模型转换为 CoreML 格式,并使用该模型在摄像头实时检测中进行目标检测。主要适用于M1、M2、M3、M4芯片的产品。 以下教程在YOLOv8/11/12均适用,此处就以 YOLOv11 举例 目录 前提条件YOLOv8/11/12 转换为 CoreML实时目标检测结论…...
NodeJS全栈WEB3面试题——P7工具链 测试
📊 7.1 Truffle vs Hardhat:各自的优势? 项目TruffleHardhat📦 成熟度老牌框架,社区大,文档全面新一代框架,现代化设计🧪 测试支持内置 Mocha 测试框架支持 Mocha Chai,…...
Mybatis框架各配置文件主要内容详解(二)
ResultMap解决了数据库字段与实体类之间不一致导致的问题 <!--resultMap:设置自定义映射属性:id:表示自定义映射的唯一标识type:查询的数据要映射的实体类的类型子标签:id:设置主键的映射关系result&…...

【优选算法 | 队列 BFS】构建搜索流程的核心思维
算法相关知识点可以通过点击以下链接进行学习一起加油!双指针滑动窗口二分查找前缀和位运算模拟链表哈希表字符串模拟栈模拟(非单调栈)优先级队列 很多人学 BFS 的时候都知道“用队列”,但为什么一定是队列?它到底在整个搜索流程中起了什么作…...
virtio介绍 (三)--spdk作为virtio后端处理nvme盘io的流程--上
目录 一 简介 二 vhost-blk层 三 bdev层 四 lvol层 五 bdev_nvme层 六 硬件驱动层 七 完整取io调用栈流程 一 简介 上节介绍了virito的基本原理,后面根据实际代码介绍virtio的流程。virtio后端代码相对于前端代码更简单,我们先以spdk中的virtio后…...
关于BackgroundScheduler的pause
在APScheduler中,pausedTrue参数的作用对象取决于其使用场景: 1. 作用于调度器(Scheduler) 当在start()方法中使用时(如 scheduler.start(pausedTrue)) 表示调度器本身启动后立即进入暂停状态&…...

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

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

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

neo4j 5.19.0安装、apoc csv导入导出 及相关问题处理
前言 突然有需求需要用apoc 导入 低版本的图谱数据,网上资料又比较少,所以就看官网资料并处理了apoc 导入的一些问题。 相关地址 apoc 官方安装网址 apoc 官方导出csv 教程地址 apoc 官方 导入 csv 地址 docker 安装 执行如下命令启动镜像 doc…...
C/C++ OpenCV 矩阵运算
C/C OpenCV 矩阵运算详解 💡 OpenCV 是一个强大的开源计算机视觉和机器学习库,它提供了丰富的矩阵运算功能,这对于图像处理和计算机视觉算法至关重要。本文将详细介绍如何使用 C/C 和 OpenCV 进行常见的矩阵运算。 矩阵的创建与初始化 在进…...

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

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

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

【计算机网络】第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
这是题目,下载附件打开是个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…...
Cocos 打包 APK 兼容环境表(Android API Level 10~15)
使用 Cocos 打包 APK:Android 10 ~ Android 15 兼容版本对照表 ✅ 本表基于 Cocos Creator 3.x 实际测试及官方建议整理 📆 最后更新时间:2025年6月 💡 推荐使用 Android Studio 2022 或命令行构建工具 Android 版本API Level推荐…...
数据结构之堆:解析与应用
一、堆的核心定义与性质 堆是一种特殊的完全二叉树,分为最大堆和最小堆: 最大堆:每个节点的值 ≥ 子节点值,根节点为最大值。最小堆:每个节点的值 ≤ 子节点值,根节点为最小值。 关键性质: …...

DBeaver导入/导出数据库时报错解决方案
导出: 报错:mysqldump: Got error: 2026: SSL connection error: error:0A000102:SSL routines::unsupported protocol when trying to connect 在额外的命令参数中添加"--ssl-modeDISABLED"可以关闭SSL服务,从而成功解决问题。这…...
GPIO模拟串口通信
在资源受限的嵌入式项目中,GPIO模拟串口(UART)仍有实际需求。尽管现代MCU多数具备多个硬件串口,但实际项目中仍可能遇到串口数量不足的情况,尤其在低成本、小封装芯片的应用场景中。 一、GPIO模拟串口的基本原理 GPIO模拟串口,顾名思义,就是通过软件控制普通IO口的高低…...

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

第十二节:第五部分:集合框架:Set集合的特点、底层原理、哈希表、去重复原理
Set系列集合特点 哈希值 HashSet集合的底层原理 HashSet集合去重复 代码 代码一:整体了解一下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 式并发服务器
🌈 个人主页:Zfox_ 🔥 系列专栏:C从入门到精通 目录 🔥 前言 一:🔥 项目储备知识 🦋 HTTP 服务器🦋 Reactor 模型🎀 单 Reactor 单线程:单I/O多路…...

基于大数据的个性化购房推荐系统设计与实现(源码+定制+开发)面向房产电商的智能购房推荐与数据可视化系统 基于Spark与Hive的房源数据挖掘与推荐系统设计
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、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 服务器? 【DeepSeek R1 回答】 是的,Everything 确实内置了 HTTP/FTP 服务器功能,这提供了一种相对安全的浏览器与本地应用交互的方式。以下是完整的实现方案&#x…...