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