Files
dht/BENCHMARKS.md
T

2.9 KiB

DHT Search 性能基线

本文档保存可重复的规模基准条件目标和已验证结果

完整运行方式和参数说明见 src/search/README.md

基准条件

项目
日期 2026-08-10
平台 Windows x86_64
逻辑处理器 32
构建模式 release
内容重复比例 每十条记录包含一条相同内容的不同 infohash
索引批量 每次 1000 个内容文档
查询预热 每类 5 次
正式查询 10 万和 100 万规模每类 50 次
数据目录 独立生成并在报告完成后清理

该基准使用确定性合成名称文件路径大小时间和内容变体 适合比较版本变化但不能替代真实 DHT 数据分布和长期运行测试

验收目标

指标 百万级目标
普通搜索过滤排序 P95 不超过 50 ms
精确 infohash P95 不超过 10 ms
大命中集合正则 P95 不超过 1 s
全量索引吞吐 不低于 2000 文档/秒
总磁盘占用 不超过 6 GiB/百万条
基准进程峰值内存 不超过 2 GiB

规模结果

记录数 内容文档 RocksDB 写入 Tantivy 索引 总磁盘 峰值内存
10,000 9,000 149,584 条/秒 3,794 文档/秒 52.42 MiB 86.21 MiB
100,000 90,000 118,833 条/秒 3,261 文档/秒 452.65 MiB 360.04 MiB
1,000,000 900,000 102,115 条/秒 2,520 文档/秒 4.36 GiB 1.70 GiB

百万级 RocksDB 占用 442.38 MiB 平均每条 463.9 字节

百万级 Tantivy 占用 3.93 GiB 平均每个内容文档 4683.1 字节

百万级查询结果

查询类型 命中数 P50 P95 P99
中文关键词 250,000 2.541 ms 2.571 ms 2.667 ms
英文关键词 200,000 5.681 ms 5.793 ms 5.804 ms
文件路径片段 10,000 0.107 ms 0.110 ms 0.113 ms
精确 infohash 1 0.007 ms 0.008 ms 0.008 ms
有限状态正则 200,000 648.231 ms 656.086 ms 764.102 ms
最近收录排序 900,000 3.322 ms 3.346 ms 3.358 ms
大小扩展名过滤 794,074 6.391 ms 6.451 ms 6.526 ms

普通全文搜索过滤排序和精确 infohash 均明显低于目标

大命中集合正则达到一秒内目标但随文档数近似线性增长 是继续扩大数据规模前最值得优化的查询路径

基准中发现并修复的问题

  • 修复四十位 infohash 被全文查询拆成二十字符窗口导致精确搜索结果为空的问题
  • 磁盘统计改为关闭 RocksDB 和 Tantivy 后执行避免漏掉尚未刷盘的数据
  • 基准索引增加 Windows 临时文件占用的指数退避并记录重试次数和累计等待时间

当前结论

百万级规模下 RocksDB 写入 Tantivy 索引普通查询磁盘和峰值内存均达到当前目标

下一阶段使用真实采集数据进行一小时和二十四小时持续运行 验证内存队列磁盘增长和网络稳定性