Skip to content
🔗 分享本题
查看我的学习进度 →

DiskANN 内存导航、SSD 批量读取与候选精排流程图

🧠 记忆锚点:内存放导航与热点,SSD 放大体量;Beam Search 批量读邻居,候选再精排。

💡 答案要点

DiskANN = Disk-based Approximate Nearest Neighbor,微软开源的磁盘友好型 ANN 索引

为什么需要 DiskANN?

场景HNSWDiskANN
1 亿条向量需要 1.2TB 内存 ❌只需几十 GB 内存 ✅
成本极贵(内存价格高)低(SSD 比内存便宜 10x)

冷热分层原理:

热数据(内存):
  - PQ 压缩向量(节省 30-50 倍内存)
  - Vamana Graph 导航结构(轻量级)

冷数据(SSD):
  - 原始 float32 向量(完整精度)
  - 详细图边列表

查询流程:
  内存 PQ 向量快速导航 → 找候选集
  → SSD 加载候选原始向量 → 精排打分

DiskANN vs HNSW 对比:

维度HNSWDiskANN
内存高(全量)低(PQ压缩)
检索延迟< 10ms10-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 倍,适合数据量超大但延迟要求不极致的场景。"