一句话定义
DiskANN 把 HNSW 式图索引搬到"内存 + SSD"混合存储上:内存只放 PQ 压缩向量与图邻接表用于导航,SSD 存原始向量供精排——用微软提出的 Vamana 图,在单节点上实现十亿级向量的毫秒级检索。
为什么重要
十亿条 768 维 float32 约 3 TB,纯内存方案(HNSW + 向量)成本动辄数十万美元级。DiskANN(NeurIPS 2019)证明"成本降一个量级、延迟仍在毫秒档"是可能的,其思想(内存放图、SSD 放数据、压缩导航)已成为 Milvus DiskANN 索引、SPANN 等一系列磁盘方案的原型。对成本敏感的大规模场景,这是绕不开的一条路线。
前置知识
kp-008(HNSW——图导航的基本原理,Vamana 是它的近亲)、kp-012(PQ 压缩表示)。
核心概念
- Vamana 图:单层近邻图(无分层),带可调参数 α 控制"长边保留度"。
- 两轮构建:先用普通近邻贪心建图,再以放宽的距离阈值(α>1)重跑一遍,把绕路场景需要的长边加回来。
- 内存侧:全量 PQ 压缩向量(导航用)+ 邻接表;SSD 侧:原始向量(精排与验证用),按节点分块连续存放以利顺序读。
- R / L / α:R=图最大度数(类似 M)、L=搜索候选队列(类似 ef)、α=长边系数(典型 1.2 附近)。
- beam width(W):每轮从 SSD 取回的节点数,权衡 IO 次数与单次传输量。
原理与机制
查询流程(内存图 + SSD 精排的分工):
1. 在内存的 PQ 压缩向量上做图贪心(与 HNSW 同型), 扩展 L 个候选
2. 每轮把候选节点的 SSD 块按 beam 取回 → 校验/精排
3. 收敛后返回 top-k (可选再回内存外全量精排)与 HNSW 的结构差异:HNSW 靠"分层"提供长程跳跃、图全在内存;Vamana 是单层图,用 α 参数在建图时显式保留长边,达到类似导航效率,同时图可以放得下"内存只存邻接表"的紧凑形态。
参数影响分析:
| 参数 | ↑ 收益 | ↑ 代价 | 备注 |
|---|---|---|---|
| R(度数) | 召回升 | 内存与 IO 升 | 类似 M,常 32~64 |
| L(队列) | 召回升 | 导航计算与 IO 次数升 | 类似 ef,在线可调 |
| α | 图更"直"、延迟降 | 建库时间升 | 1.0→1.2 两轮构建 |
| W | 单轮吞吐升 | 单次延迟升 | 对云盘尤其敏感 |
关键工程前提:SSD 随机读性能决定下限。论文与后续工作(Fresh-DANN、SPANN、Starling)的进展一大半是"如何在廉价云盘上减少随机读次数"。本地 NVMe 与网络云盘(EBS 类)差距可达数倍到数十倍——选型时先问磁盘规格。
公式或模型
本节不适用:架构篇,内存账对比见 kp-026(DiskANN 路线内存 ≈ PQ 向量 + 图 ≈ 原始方案的 1/10 量级)。
图示
内存: [PQ压缩向量 × N] + [邻接表(节点→邻居id)] ← 导航在这里
│ 贪心扩展(压缩距离)
▼
SSD : [块1: 原始向量×节点] [块2] … [块k] ← beam 取回精排
查询: 内存图走 L 步 → 每轮 W 个候选的 SSD 块 → 校验排序 → top-k实例或案例
Milvus 的 DiskANN 索引类型即此思路的产品化:某用户 5 亿条 768 维向量,HNSW + fp32 需内存约 1.6 TB(多副本后翻倍);改 DiskANN 后内存约 150 GB + NVMe 2 TB,p99 从 3 毫秒升至约 10 毫秒但仍在业务预算内,月成本下降超过一半。结论形态:"延迟预算宽松、规模巨大"时 DiskANN 是成本最优解。
直观类比
HNSW 是"整个图书馆搬进自家书房";DiskANN 是"书房只放目录卡片和地图(压缩表示+图),书架在仓库(SSD)"——按地图走到候选书架,再跑一趟仓库取原书核对。核对次数(IO)就是延迟。
常见误区
- "DiskANN 延迟和 HNSW 一样"——它用 IO 换内存,p99 通常高一个量级(毫秒→十毫秒档)且受磁盘抖动影响明显;低延迟刚需场景要重测。
- "随便挂块云盘就行"——网络云盘随机 IOPS 低,会把 p99 拖到不可用;本地 NVMe 或高 IOPS 盘是前提条件。
- "DiskANN 支持高频更新"——原始方案为静态或低频更新设计(Fresh-DANN 等变体处理动态),高频 upsert 场景需评估段重建策略,见 kp-022。
自测题
- Vamana 用什么机制弥补"没有分层"带来的长程导航损失?
- 内存里为什么放 PQ 压缩向量而不是原始向量?
- 上 DiskANN 前必须确认的三件事?
答:α 参数的两轮建图:第二轮放宽距离阈值保留长边,让贪心路径可以跨区域跳跃,接近分层的导航效率。
答:导航只需"相对远近"不需精确距离,PQ 表示足以支持贪心排序且体积小一个量级;精确距离只在 SSD 取回原始向量后计算。
答:磁盘随机读规格(IOPS/带宽)、延迟预算放宽到十毫秒档、写入模式是否低频(或接受段式重建)。
与其他知识点的关系
kp-008 的 HNSW 是它内存版的对照;kp-012 的 PQ 是它的导航燃料;kp-026 的成本账展示它省多少钱;kp-033 的 SPANN 是同一"磁盘路线"的分区倒排变体。
延伸阅读
Jayaram Subramanya et al., "DiskANN: Fast Accurate Billion-point Nearest Neighbor Search on a Single Node"(NeurIPS 2019)——Vamana 图与内存/SSD 分工的原始论文。