跳转到主要内容

向量数据库分片:HNSW为何在分区边界失效及应对策略

阅读需 1 分钟Tian PanTian Pan

大多数向量数据库教程只展示如何插入百万条嵌入并运行查询。但它们不会告诉你六个月后会发生什么——当你的语料库已经超出单节点承载能力,你不得不对整个检索管道所依赖的HNSW索引进行分片时,实际情况如何。答案是:供应商在营销材料中刻意回避的事实是,HNSW图在分区方式上存在特殊阻力,会导致无声的召回率下降,而恢复这一质量所需的运营模式会带来真实的复杂性。

本文将深入探讨HNSW分片失效的技术原因、实际中召回率损失的表现,以及团队在超出单节点容量后用于维持检索精度的运营模式。

为什么HNSW无法干净地分区

HNSW(层次化可导航小世界)是大多数生产向量数据库的底层索引结构——Qdrant、Weaviate、Milvus和pgvector默认均采用此方案。该算法构建一个多层图,每个向量与少量邻居相连,顶层提供长程遍历能力,底层实现精确的局部搜索。

HNSW的关键特性在于:邻居关系由高维空间中的位置决定,而非由你控制的任何键值或分区方案决定。一旦分布式存储了语料库,两个最近邻的向量很可能存储在不同节点上。分片时,你不得不移除跨越分片边界的边——而这些边恰恰是图用于精确搜索的核心所在。

这一后果在图分区研究的基准测试中有所体现:在分布式HNSW查询中,超过80%的搜索步骤构成跨分片边界的远程过程调用。分区后的图并非"基本可用",而是从一个连贯的全局结构根本性地退化为若干孤立的局部图,每个局部图都误以为自己就是全貌。

还存在一种更隐蔽的失效模式:不可达节点。当HNSW图在实时更新条件下被分区时,部分向量会失去所有图内连接,对查询实际上变得不可见。研究发现,分区后连接性差的向量(即入度缺陷)占分布式场景总召回率损失的84.6%。

召回率损失的实际表现

关于召回率下降的直觉模型通常是渐进且成比例的:分片越多,结果略差。但实际模式远不如此可预测。

在严格控制的条件下——通过将向量重新分配到最近聚类来强制执行均衡分区——召回率下降幅度为0.2%至3.6%,具体取决于分区策略。这个范围看似很小,但若你在规模化场景下运行推荐系统,每1%的召回率下降都是可测量的参与度降低。

生产环境中的实际遭遇更具不连续性。性能在语料库超过某个临界点之前保持可接受——即HNSW的工作集不再适配内存时,性能会急剧下降。PipeANN和SPANN等系统在内存与索引比低于30%时根本无法运行,DiskANN在内存可用率低于20%时出现吞吐量骤降。这个悬崖并非供应商发布的基准数字所预测的——那些数字是在配置为将完整索引保留在内存中的硬件上测量的。

跨分片邻居是根本原因。当查询向量的真实最近邻分布在多个分片时,每个分片的局部HNSW搜索返回其最优局部结果——这些结果可能与全局正确答案毫无重叠。查询协调器合并的是各分片局部最优但整体错误的结果。

三种补偿性运营模式

突破单节点阈值的团队已收敛于三种模式,可部分恢复分区带来的召回质量损失。

分片感知查询路由避免了暴力散集方式(向所有分片发送查询、合并结果),通过粗粒度索引结构将查询只路由到相关分片。主流实现采用基于质心的路由:维护一个小型聚类质心索引,首先将传入查询与该索引比较,然后只搜索包含附近质心的分片。对于聚类良好的语料库,这可以将扇出从数百个分片减少到个位数。权衡在于:位于聚类边界的查询仍需多分片访问,维护质心索引增加了一个需要独立运营维护的协调层。

跨分片重排序解决了各分片HNSW图导致的排名不一致问题。每个分片返回其局部前K个候选及距离分数,协调器收集所有分片结果,合并候选列表并进行全局重排序。关键实现细节:"扇出主导延迟"特性意味着最慢的分片决定查询延迟,无论其他分片响应多快。单个过载分片产生的尾延迟比所有分片平均延迟更糟糕。重排序本身开销很小——等待最后一个分片才是P99的杀手。

分区大小监控是那个不起眼但能防止前两种模式比必要情况更频繁启用的运营模式。行业经验已收敛于每分片1000万至3000万向量为实际可行范围,4至8个分片为上限——超过此上限后工作节点间通信开销会超过并行化收益。运营上的关键点是:大多数系统创建后无法修改分片数量,因此初始分区策略成为承重墙。监控每个分片的增长速度,并在任何分片达到内存悬崖之前触发重聚类,才能让其他两种模式不必承担超出应有的工作量。

会员专享

余下内容仅对会员开放。

会员可读完整内容 —— 每一个公开发布的观点背后,那些框架、决策与推理的全貌。

  • 完整文章,包含未公开存档的部分
  • 可落地的工作框架,附带权衡与决策依据
  • 新文章抢先看,先于公开发布

随时取消 · 一次订阅,畅读全部

参考资料

保持联系,关注我获取更多内容

阅读需 10 分钟

单向量版本标签:每个 Embedding 迁移背后的缺失列

向量数据库在发布时并没有配备 Postgres 已经拥有二十年的迁移工具 —— 没有 ALTER TABLE,没有在线模式变更,也没有单行版本控制。使 Embedding 升级得以平稳进行的规范,始于一个大多数团队都忘记添加的列。

insider
rag
阅读需 11 分钟

Embedding 模型轮换是数据库迁移,而非代码部署

更换 Embedding 模型并非简单的配置更改——新向量存在于与旧向量不同的流形中,因此这本质上是一次完整的重新 Embedding 加上一次伪装成部署的切换。这是一份包含影子索引、双读一致性指标、分阶段流量切换以及团队经常遗漏预算的运营成本的迁移指南。

insider
rag
阅读需 10 分钟

嵌入偏移:正在杀死你长期运行的 RAG 系统的沉默退化

混合嵌入模型、分块策略变化以及预处理不一致是如何在无声中降低 RAG 检索质量的 —— 以及你该如何应对。

insider
rag
阅读需 10 分钟

你的向量数据库也有热点 Key:为什么 ANN 索引在生产成本上“撒了谎”

公开的 ANN 基准测试通常运行均匀的查询负载,但在生产环境中检索是齐夫分布(Zipfian)的 —— 这种差异表现为分片过载、RAM 浪费以及超出预期的 p99 延迟。

insider
vector-database
阅读需 10 分钟

源文档更新从未同步到向量索引的那些 Embedding

你的 embedding 流水线在创建文档时能够正常触发,但在编辑时却失效了。数月后,检索系统依然在提供源文档早已不再认可的内容 —— 而唯一的告警竟是用户将这些错误内容反馈给了客服。

rag
vector-database