
🧠 记忆锚点:内存放导航与热点,SSD 放大体量;Beam Search 批量读邻居,候选再精排。
💡 答案要点
DiskANN = Disk-based Approximate Nearest Neighbor,微软开源的磁盘友好型 ANN 索引
为什么需要 DiskANN?
| 场景 | HNSW | DiskANN |
|---|---|---|
| 1 亿条向量 | 需要 1.2TB 内存 ❌ | 只需几十 GB 内存 ✅ |
| 成本 | 极贵(内存价格高) | 低(SSD 比内存便宜 10x) |
冷热分层原理:
热数据(内存):
- PQ 压缩向量(节省 30-50 倍内存)
- Vamana Graph 导航结构(轻量级)
冷数据(SSD):
- 原始 float32 向量(完整精度)
- 详细图边列表
查询流程:
内存 PQ 向量快速导航 → 找候选集
→ SSD 加载候选原始向量 → 精排打分DiskANN vs HNSW 对比:
| 维度 | HNSW | DiskANN |
|---|---|---|
| 内存 | 高(全量) | 低(PQ压缩) |
| 检索延迟 | < 10ms | 10-30ms(SSD I/O) |
| 召回率 | 95-98% | 90-95% |
| 适用数据量 | < 1 亿 | 1 亿 - 100 亿 |
Milvus 配置示例:
python
index_params = {
"metric_type": "L2",
"index_type": "DISKANN",
"params": {"search_list": 100}
}
collection.create_index(field_name="embedding", index_params=index_params)面试话术:
"DiskANN 解决了超大规模向量检索的内存瓶颈。原理是冷热分层:内存里放 PQ 压缩的轻量索引做快速导航,SSD 里放原始向量做精排。1 亿条向量 HNSW 需要 1TB+ 内存,DiskANN 只需几十 GB,成本降一个数量级。缺点是依赖 SSD I/O,延迟比纯内存 HNSW 高 2-3 倍,适合数据量超大但延迟要求不极致的场景。"