2.9 KiB
2.9 KiB
DHT Search 性能基线
本文档保存可重复的规模基准条件目标和已验证结果
完整运行方式和参数说明见 dht-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 索引普通查询磁盘和峰值内存均达到当前目标
下一阶段使用真实采集数据进行一小时和二十四小时持续运行 验证内存队列磁盘增长和网络稳定性