数据库信息速递-- 如何评估矢量数据库 (翻译)

在今天数据驱动的世界中,非结构数据呈指数级别增长,在生成式人工智能和大模型语言LLMS的兴起更是加剧这一个情况的数据爆炸趋势,将我们的注意力印象了一项突破性的技术,矢量数据库,作为人工智能时代重要的基础设施,矢量数据库是存储,索引和搜索非机构化数据的强大工具。

随着全球对矢量数据库的关注度的增加,一个紧迫的问题浮现出来,如何为业务选择合适的数据库,或者说矢量数据库,有哪些关键的因素需要考虑本文将深入探讨,并从可伸缩性,功能性,和性能等角度提供见解,帮助你在这个领域做出比较可靠的选择。

什么是矢量数据库

传统的关系数据库系统通过预定义格式在结构化表中管理数据,并且在执行精确的搜索操作方面表现出色,相反,矢量数据库专注于通过矢量嵌入高维数据值来表示存储和检索非结构数据,如音像,音频,视频和文本。

矢量数据库以相似性搜索而闻名,使用近似最临近ANN算法等技术,ANN算法根据空间关系排列数据,并在庞大的数据集中快速识别给定的最近数据点。

开发人员在构建推荐系统,聊天机器和搜索相似图像,视频和音频的应用程序使用矢量数据库,在庞大的数据集合中快速识别给定的查询最近的周围的数据点。

随着chatGPT的等大型语言的兴起,矢量数据库在解决大模型数据分析方面变得非常的有效。

矢量数据库与矢量搜索技术

2017年,Meta开源了FAISS,大大降低了与矢量搜索相关的成本和障碍。2019年,Zilliz推出了Milvus,这是一款领先业界的专用开源矢量数据库。此后,许多其他矢量数据库相继出现。矢量数据库的趋势在2022年迅速崛起,许多传统搜索产品(如Elasticsearch和Redis)进入市场,同时大规模使用GPT等LLMs。

这些矢量搜索产品之间有哪些相似之处和差异呢?我大致将它们分为以下类型:

  1. 矢量搜索库: 这些是没有基本数据库功能(如插入、删除、更新、查询、数据持久性和可伸缩性)的算法集合,FAISS就是一个主要例子。
  2. 轻量级矢量数据库: 这些构建在矢量搜索库上,使其在部署上更加轻便,但在可伸缩性和性能上较差,Chroma就是一个例子。
  3. 矢量搜索插件: 这些是依赖于传统数据库的矢量搜索附加组件。然而,它们的架构是为传统工作负载设计的,这可能对性能和可伸缩性产生负面影响,Elasticsearch和Pgvector就是主要例子。
  4. 专用矢量数据库: 这些数据库是专为矢量搜索而设计的,相对于其他矢量搜索技术具有明显的优势。例如,专用矢量数据库提供分布式计算和存储、灾难恢复和数据持久性等功能,Milvus就是一个主要例子。

如何评估矢量数据库?

在评估矢量数据库时,可伸缩性、功能性和性能是最关键的三个指标。

可伸缩性

可伸缩性是确定矢量数据库能否有效处理指数级增长的数据的关键因素。在评估可伸缩性时,必须考虑水平 vs. 垂直可伸缩性、负载均衡和多重复制。

  1. 水平 vs. 垂直可伸缩性: 不同的矢量数据库采用不同的扩展技术以满足业务增长的需求。例如,Pinecone 和 Qdrant 选择垂直扩展,而 Milvus 采用水平扩展。水平可伸缩性相对于垂直可伸缩性具有更大的灵活性和性能,上限较少。
  2. 负载均衡: 调度对于分布式系统至关重要。其速度、粒度和精度直接影响负载管理和系统性能,如果未正确优化,可能会降低可伸缩性。
  3. 多重复制支持: 多重复制允许对各种查询进行差异化响应,提高系统的速度(以查询每秒,QPS,为度量)和整体可伸缩性。

多重副本支持

多重副本使得对各种查询进行差异化响应成为可能,提升系统的速度(以查询每秒,QPS,为度)和整体可伸缩性。

不同的矢量数据库迎合不同类型的用户,因此它们的可伸缩性策略各不相同。例如,Milvus专注于数据量迅速增长的场景,并采用了具有存储计算分离的水平可伸缩架构。Pinecone和Qdrant则设计用于具有较为适中数据量和扩展需求的用户。LanceDB和Chroma则将轻量级部署优先级置于可伸缩性之上。

功能性

我将矢量数据库的功能分为两个主要类别,即面向数据库的功能和面向矢量的功能。

面向矢量的功能

矢量数据库在许多用例中都很有用,例如检索增强生成(RAG)、推荐系统以及使用各种索引进行语义相似性搜索。因此,支持多种索引类型的能力是评估矢量数据库的一个关键因素。

目前,大多数矢量数据库支持HNSW(分层可导航小世界)索引,其中一些还支持IVF(倒排文件)索引。这些索引适用于内存操作,并且最适合在资源充足的环境中使用。然而,一些矢量数据库选择了基于mmap的解决方案,用于硬件资源有限的情况。虽然更容易实施,但基于mmap的解决方案会牺牲性能。

Milvus,作为历史较长的矢量数据库之一,支持包括基于磁盘和GPU的索引在内的11种索引类型。这种方法确保了对各种应用场景的适应性。

面向数据库的功能

对于传统数据库有益的许多功能也适用于矢量数据库,例如变更数据捕获(CDC)、多租户支持、资源组和基于角色的访问控制(RBAC)。Milvus和一些配备了矢量插件的传统数据库有效地支持这些面向数据库的功能。

性能

性能是评估矢量数据库的最关键指标。与传统数据库不同,矢量数据库进行的是近似搜索,这意味着检索到的前k个结果不能保证100%的准确性。因此,除了传统的指标如每秒查询数(QPS)和延迟之外,“召回率”是矢量数据库的另一个关键性能指标,用于量化检索准确性。

我推荐两个公认的开源基准测试工具来评估不同的指标:ANN-Benchmark和VectorDBBench。完全透明声明:VectorDBBench是由Zilliz创建的,如下所述。

ANN-Benchmark

矢量数据库的矢量索引是一个关键且资源密集的方面,其性能直接影响整体数据库性能。ANN-Benchmark是由Martin Aumueller、Erik Bernhardsson、Alec Faitfull和其他多名贡献者开发的领先基准测试工具,用于评估不同矢量索引算法在一系列真实数据集上的性能。

ANN-Benchmark允许您绘制基于任何预先计算的数据集的各种算法的召回率/每秒查询数测试结果的图表。它将召回率绘制在x轴上,将QPS绘制在y轴上,展示了每个算法在不同检索准确性水平上的性能。

有关基准测试结果,请参阅ANN-Benchmark网站。

VectorDBBench

虽然ANN-Benchmark在选择和比较不同的矢量搜索算法方面非常有用,但它并不能提供对矢量数据库的全面概述。我们还必须考虑诸如资源消耗、数据加载能力和系统稳定性等因素。此外,ANN-Benchmark忽略了许多常见场景,比如过滤矢量搜索。

VectorDBBench是我们在Zilliz创建的一款开源基准测试工具,可以解决上述问题。它专为开源矢量数据库(如Milvus和Weaviate)以及Zilliz Cloud和Pinecone等全托管服务设计。由于许多完全托管的矢量搜索服务不公开其参数供用户调整,VectorDBBench将查询每秒(QPS)和召回率分开显示。

有关基准测试结果,请参阅VectorDBBench网站。

在矢量数据库的动态领域中,许多产品展示出独特的重点和优势。没有通用的“最佳”矢量数据库;选择取决于您的需求。因此,评估矢量数据库的可伸缩性、功能性、性能和与特定用例的兼容性是至关重要的。