向量数据库

DiskANN:磁盘优先的十亿级检索

进阶索引算法约 25 分钟kp-013

前置知识

一句话定义

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 压缩表示)。

核心概念

原理与机制

查询流程(内存图 + 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)就是延迟。

常见误区

  1. "DiskANN 延迟和 HNSW 一样"——它用 IO 换内存,p99 通常高一个量级(毫秒→十毫秒档)且受磁盘抖动影响明显;低延迟刚需场景要重测。
  2. "随便挂块云盘就行"——网络云盘随机 IOPS 低,会把 p99 拖到不可用;本地 NVMe 或高 IOPS 盘是前提条件。
  3. "DiskANN 支持高频更新"——原始方案为静态或低频更新设计(Fresh-DANN 等变体处理动态),高频 upsert 场景需评估段重建策略,见 kp-022。

自测题

  1. Vamana 用什么机制弥补"没有分层"带来的长程导航损失?
  2. 答:α 参数的两轮建图:第二轮放宽距离阈值保留长边,让贪心路径可以跨区域跳跃,接近分层的导航效率。

  3. 内存里为什么放 PQ 压缩向量而不是原始向量?
  4. 答:导航只需"相对远近"不需精确距离,PQ 表示足以支持贪心排序且体积小一个量级;精确距离只在 SSD 取回原始向量后计算。

  5. 上 DiskANN 前必须确认的三件事?
  6. 答:磁盘随机读规格(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 分工的原始论文。

相关知识点