向量数据库的横向扩展是指通过增加系统中的机器或节点来处理不断增长的工作负载,而不是升级单台服务器的硬件(这称为纵向扩展)。这种方法将数据和计算负载分布到多个节点上,使数据库能够管理更大的数据集和更高的查询吞吐量。对于向量数据库而言,横向扩展至关重要,因为它们专门用于存储和查询高维向量(例如机器学习模型产生的嵌入),而相似性搜索(如查找查询向量的最近邻)是计算密集型的。通过分散工作负载,系统可以在数据量增加和用户需求增长时保持性能。
为了实现横向扩展,向量数据库通常使用**分片**,这是一种将数据集分割成更小的子集(分片)并将其分布到不同节点上的方法。对于向量数据,分片通常涉及对向量索引进行分区。一种常见的方法是使用诸如 *k-means* 或 *层级可导航小世界(HNSW)* 等算法将向量分组到聚类中。每个聚类被分配到一个分片,然后根据与查询向量的接近程度将查询路由到最相关的分片。例如,系统可以预先计算聚类中心,并将查询向量与这些中心进行比较,以确定需要搜索哪些分片。这减少了每次查询涉及的节点数量,提高了效率。一些数据库,如 Milvus,使用“代理-协调器”架构,其中协调器节点管理分片位置并协调分布式查询。
当执行查询时,系统会并行地将查询发送到相关的分片。每个分片处理其部分的索引并返回局部结果,然后将这些结果合并和排序以产生最终输出。虽然这种方法提高了可伸缩性,但也引入了权衡。例如,如果初始分片选择遗漏了相关的聚类,查询准确性可能会降低,导致结果不完整。为了缓解这个问题,系统通常会搜索比严格需要更多的分片(这种技术称为*过度提取*)。此外,随着新数据的添加,维护聚类分配需要周期性的再平衡,这可能会占用大量资源。尽管存在这些挑战,通过分片实现的横向扩展仍然是向量数据库的基础策略,使其能够在大规模下支持推荐系统或语义搜索等应用。