现如今,已有超过20种商业向量数据库管理系统(VDBMSs),它们都是在过去五年内推出的。但基于嵌入的检索(EBR)已经被研究了超过十年,而相似性搜索更是达到了惊人的半个世纪甚至更久。从算法转向系统的这一变革是由新的数据密集型应用驱动的,尤其是大型语言模型(LLMs),它们需要大量的非结构化数据,以及可靠、安全、快速且可扩展的查询处理能力。现有各种新的数据管理技术来满足这些需求,但尚无全面的调查来彻底审查这些技术和系统。
https://www.zhuanzhi.ai/paper/e86f04dba5c47ab29a19fe1db3890804
我们首先识别向量数据管理的五个主要障碍,即语义相似性的模糊性、向量的大尺寸、相似性比较的高成本、缺乏可用于索引的自然划分,以及有效应答要求属性和向量的“混合”查询的困难。克服这些障碍已经导致了新的查询处理、存储和索引以及查询优化和执行的方法。对于查询处理,各种相似性分数和查询类型现已被充分理解;对于存储和索引,技术包括向量压缩,即量化,以及基于随机化、学习划分和“可导航”的划分技术;对于查询优化和执行,我们描述了混合查询的新运算符,以及计划枚举、计划选择和硬件加速查询执行的技术。这些技术导致了各种VDBMSs在设计和运行时特性的光谱上,包括专门为向量设计的“原生”系统和将向量功能整合到现有系统中的“扩展”系统。 然后,我们讨论基准测试,并最后概述了几个研究挑战,并指出未来工作的方向。
随着用于信息检索 [36] 的大型语言模型(LLMs)[71] 的崛起,以及电子商务和推荐平台 [133,125,63] 等经济驱动因素背后的非结构化数据的增长,有需要新的向量数据库管理系统 (VDBMSs) 来提供传统的功能,如查询优化、事务处理、可扩展性、容错能力,以及隐私和安全性,但这是针对非结构化数据的。 由于这些数据并不是由固定模式中的属性表示的,因此它们不是通过结构化查询而是通过相似性搜索来检索的,在这种搜索中,与查询具有相似语义意义的数据被检索 [95]。为了支持这种类型的搜索,实体如图片和文档首先通过嵌入模型编码为D维特征向量,然后存储在VDBMS中。双编码器模型 [42] 描述了这个过程,也称为密集检索 [73]。
因此,VDBMS中的模块分为查询处理器和存储管理器。查询处理器包括查询规范、逻辑运算符、它们的物理实现以及查询优化器;而存储管理器则维护搜索索引并管理向量的物理存储。这在图1中有所示。这些模块的设计影响了VDBMS的运行时特性。许多应用,如LLMs,都是读取密集型的,需要高查询吞吐量和低延迟。其他应用,如电子商务,也是写入密集型的,需要高写入吞吐量。此外,一些应用需要高查询准确性,这意味着检索到的实体与查询在语义上真正匹配,而其他应用可能对错误更为宽容。因此,开发合适的VDBMS需要了解技术的整体情况以及它们如何影响系统的特性。
虽然对于处理传统的结构化数据有成熟的理解,但对于向量数据并非如此。我们提出了五个关键障碍。(1) 模糊的搜索条件。结构化查询使用精确的布尔谓词,但向量查询依赖于一个难以准确捕捉的模糊语义相似性概念。(2) 昂贵的比较。属性谓词(例如 <, >, = 和 ∈)大多可以在O(1)时间内评估,但相似性比较通常需要O(D)时间,其中D是向量的维度。(3) 大尺寸。结构化查询通常只访问少量属性,从而可以设计如列存储这样的高效读取存储结构。但向量搜索需要完整的特征向量。向量有时甚至跨越多个数据页面,使磁盘检索更加昂贵,同时也增加了内存的压力。(4) 缺乏结构。结构化属性主要是可排序或序数的,导致通过数字范围或类别的划分来设计搜索索引。但向量没有明显的排序顺序,也不是序数,这使得难以设计既准确又高效的索引。(5) 与属性的不兼容。在多个属性索引上的结构化查询可以使用简单的集合操作,如并集或交集,将中间结果收集到最终结果集中。但向量索引通常在找到k个最相似的向量后停止,与属性索引扫描的结果结合起来可能会导致预期结果减少。另一方面,修改索引扫描运算符以考虑属性谓词可能会降低索引性能。如何在既高效又准确的方式下支持既有属性又有向量的“混合”查询仍然不清楚。
现在已经有各种技术围绕这些问题开发,旨在在支持大量向量的同时实现低查询延迟、高结果质量和高吞吐量。其中一些是关于相似性搜索几十年研究的结果。其他技术,包括混合查询处理、基于向量压缩的索引、基于硬件加速的技术以及分布式架构,都是较近期的发明。
在本文中,我们首先从通用VDBMS的角度对这些技术进行调研,将它们分为适用于查询处理和适用于存储和索引的技术。查询优化和执行与核心查询处理器分开处理。在这些讨论之后,我们将这些技术的理解应用于描述现有的VDBMS。
查询处理。查询处理器主要处理如何首先指定搜索条件以及如何执行搜索查询。对于前者,有各种相似性分数、查询类型和查询接口可供选择。对于后者,基本运算符是相似性投影,但由于它可能效率不高,因此已经开发了各种基于索引的运算符。我们在第2节中讨论查询处理器。
存储和索引。存储管理器主要处理如何组织和存储向量集合以支持高效准确的搜索。对于大多数系统,这是通过向量搜索索引实现的。我们将索引分类为基于表的索引,如E2LSH [49]、SPANN [44] 和IVFADC [69],这些索引通常容易更新;基于树的索引,如FLANN [96]、RPTree [47,48] 和ANNOY [1],旨在提供对数搜索;以及基于图的索引,如KGraph [52]、FANNG [66] 和HNSW [90],已经被证明在经验上表现良好,但理论理解较少。为了解决划分向量集合的难题,技术包括随机化[67,49,31,96,48,52,123,115]、学习划分[127,69,91,96,112]以及我们称之为“可导航”的划分[51,89,90]。为了处理大存储大小,已经为压缩向量上的索引开发了几种技术,包括量化[62,69,91,113,129,133],以及基于磁盘的索引[61,44]。我们在第3节中讨论索引。
优化和执行。查询优化器和执行器主要处理计划枚举、计划选择和物理执行。为了支持混合查询,已经开发了几种混合运算符,基于我们所说的“块优先”扫描[133,125,61] 和“访问优先”扫描[136]。还有几种枚举和选择的技术,包括基于规则和基于成本的选择[133,125]。对于查询执行,有几种技术旨在利用大向量的存储局部性设计硬件加速运算符,利用处理器缓存[125]、SIMD [125,34,35] 和GPUs [70]等功能。还有分布式搜索技术和支持高吞吐量更新的技术,即基于异地更新。我们在第4节中讨论优化和执行。 当前系统。我们将现有的VDBMSs分类为原生系统,这些系统专门围绕向量管理设计,包括Vearch [81]、Milvus [125] 和Manu [63];扩展系统在现有的数据管理系统之上增加向量功能,包括AnalyticDB-V [133] 和PASE [139];以及搜索引擎和库,旨在仅提供搜索功能,如Apache Lucene [2]、Elasticsearch [3] 和Meta Faiss [4]。原生系统往往更倾向于针对特定功能的高性能技术,而扩展系统往往更倾向于适应不同工作负载但不一定是最快的技术。我们在第5节中调查当前的系统。
相关综述。有一个高级调查可用,主要关注VDBMS的基本概念和用例。同样,有一些教程专门针对相似性搜索[106,107]。我们通过关注与整体向量数据管理相关的具体问题和技术来补充这些内容。还有一些调查涵盖了与向量相关的数据类型,如时间序列和字符串,但VDBMS不支持。与这些其他数据类型的系统不同,VDBMS不能对特征向量维度做出任何假设2。我们建议读者参考[54,53]。对于剩下的部分,我们在第6节简要讨论基准测试,然后在第7节总结研究挑战和尚未解决的问题。我们在第8节结束这篇调查。