订阅更新

HNSW 和 IVF 向量索引怎么选?

面试问 095 约 2 分钟读完 1 次阅读

本文目录
  1. 面试怎么回答
  2. HNSW:沿着近邻图逐步靠近答案
  3. IVF:先找到可能的桶,再扫描桶内向量
  4. 怎么选?看五个问题
  5. 一个典型误区

面试怎么回答

HNSW 是图索引,通过多层近邻图导航,通常低延迟和召回表现好,但内存与构建成本较高;IVF 先聚类分桶,查询只扫描 nprobe 个桶,更适合通过分桶和 PQ 控制大规模存储成本,但需要训练并仔细调参。我不会只按数据量拍板,而会用 Ground Truth 对比 Recall@K、P95、QPS、内存、更新和过滤效果,再选择满足业务 SLA 的 Pareto 点。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

同一批向量,HNSW 查得快、召回高,内存却不断上涨;IVF 内存压力小一些,参数没调好时又容易漏结果。

面试官真正想听的,不是两个缩写的定义,而是你能不能说清它们的检索路径和取舍。

HNSW 用图导航逼近近邻,IVF 先聚类再只扫描部分桶;选择时要一起看数据规模、内存、更新方式、过滤条件和召回—延迟目标。

HNSW:沿着近邻图逐步靠近答案

HNSW 会为向量建立多层近邻图。查询从稀疏高层快速定位大致区域,再到更密集的底层寻找候选。

它通常有较好的低延迟和召回表现,也不需要像 IVF 那样先训练聚类中心。但图结构会增加内存,构建成本不低,大量删除和频繁重建也需要关注。

关键参数包括 M、efConstruction 和 efSearch。增加邻接边或扩大搜索范围通常能提高召回,但会消耗更多内存、构建时间或查询时间。

IVF:先找到可能的桶,再扫描桶内向量

IVF 先把向量聚成多个倒排桶。查询先找到最近的若干聚类中心,只扫描这些桶里的候选,而不是全量比较。

nlist 决定桶的数量,nprobe 决定一次搜索多少个桶。nprobe 越大,召回通常越高,但扫描量和延迟也会上升。IVF 需要代表性训练样本,数据分布发生明显变化后还要考虑重新训练或重建。

IVF 还可以与 PQ 组合压缩向量,降低内存,但会再引入量化误差。

HNSW 与 IVF 检索路径

怎么选?看五个问题

第一,数据规模和内存预算。中等规模、内存充足、追求高召回低延迟时,HNSW 常是直接选择;超大规模且需要压缩时,IVF/PQ 更有空间优势。

第二,写入和删除。持续增量写入、频繁删除时,要验证具体实现的可见性、墓碑和重建机制,不能只看算法论文。

第三,过滤比例。租户或权限条件会缩小候选集,过滤执行在索引前、索引中还是检索后,会显著影响召回与性能。

第四,构建窗口。HNSW 构图和 IVF 训练都有成本,必须评估全量重建、增量更新和故障恢复时间。

第五,业务目标。用固定评测集画出 Recall@K、P95 延迟、QPS、内存的曲线,而不是拿默认参数比一次结果。

向量索引选型清单

一个典型误区

有的团队只把 efSearch 或 nprobe 调大,看到召回提升就上线。结果高峰期 P99 延迟明显上升,或者过滤后有效候选不足。

正确测试应覆盖不同查询难度、租户规模、过滤条件和并发,并保留 Flat 精确检索的小样本结果作为 Ground Truth。没有基准答案,就不知道近似索引到底漏了多少。

刷题进度保存在当前浏览器