性能实测
100 万条,0.6 秒。
一句话亮点:100 万条数据,检索仅需 0.6 秒,内存 5.3GB,索引 1.0GB。
检索性能:数据规模 vs 耗时
纵轴为对数刻度。修复前,检索耗时随数据规模线性恶化,100 万条直接超时崩溃;三刀全修后,稳定在亚秒级,不随规模增长。
检索优化过程(答辩专用表)
| 阶段 | 检索耗时(100 万条数据) |
|---|---|
| 未修复(O(n²) 反查) | >60s 超时(检索崩溃) |
| 修 Top-K 堆排序后 | 50~94s |
| 三刀全修(热检索) | 0.59~0.61s |
| 三刀全修(冷启动) | 28~35s(缓存构建,仅一次) |
100 万条满载,资源占用
| 项 | 数值 |
|---|---|
| 内存 RSS | 5.3GB(16G 电脑安全,仅占 1/3) |
| 索引文件 | 1.0GB / 101 万词 |
| 仓库文本(json) | 1.9GB |
| 热检索耗时 | 0.59~0.61s |
| 冷启动耗时 | 28~35s(缓存构建,仅一次) |
检索优化三刀
第一刀:反查缓存(O(n²) → O(1))
搜索时对每个命中条目都重读整个仓库 + 线性遍历找 id,形成 O(n²)。加 mtime 失效的内存缓存(id → 条目哈希表),反查从 O(n) 降到 O(1)。3 万条检索从 10.9s 降到 0.84s。
第二刀:Top-K 堆排序(O(n log n) → O(n log k))
搜索对全量命中结果全量排序,只为取前 20 条。改用最大堆只维护 top-20,消除排序开销。
第三刀:索引缓存 + 稀有词优先(50~94s → 0.6s)
高频词(如「记忆」)命中 100 万条,全量遍历评分拖垮性能。改为:索引加 mtime 缓存不再每次读 1GB;查询词按命中数升序,只用稀有词(命中 ≤5000)构建候选集。查询「记忆底座定位」时,「底座」「定位」各只命中 2000 条,遍历量从 100 万骤降到 2000。
可复现
- 100 万条热检索 5 次复测 0.568~0.603s,结果稳定。
- 独立实例隔离压测(
HIVE_DATA_DIR隔离),全程不碰正式库。 - 每 500 条埋一条可回溯锚点,验证召回率。
结论:内存不是瓶颈(16G 电脑绰绰有余),检索是唯一瓶颈——三刀全修后达标(<1s),且不随数据规模增长。
← 返回首页