集成向量数据库对比:MyScale vs. PostgreSQL & OpenSearch

MyScale 是一款提供完整 SQL 支持的集成向量数据库,而 PostgreSQL 和 OpenSearch 是两个最近都添加了向量相似性搜索功能的传统数据库。本文将对 MyScale 、PostgreSQL 和 OpenSearch 进行比较。

随着大语言模型(LLMs)的出现,人们对将对话界面集成到各种应用程序中的兴趣不断增加,例如搜索引擎、代码生成器和数据分析工具。向量相似性搜索是一项关键技术,在通过检索增强生成(RAG)提高 LLMs 性能方面起着至关重要的作用。

如今,市场上各种各样的向量数据库产品层出不穷;这些数据库大致可以分为以下几类:专门设计用于向量索引的专用向量数据库,集成向量数据库,以及扩展支持了向量搜索的通用数据库。

集成向量数据库与专用向量数据库相比,具有一些明显的优势,包括:

本文中,我们将对三个集成向量数据库进行比较:

正如下文所述,我们全面的基准评估表明,MyScale 在过滤向量搜索的准确性、性能表现、成本效益和索引构建时间方面明显超过其他产品。重要的是,以各种过滤比率下提供良好的搜索准确性和 QPS 为基准,MyScale 是唯一通过测试的产品。

此外,MyScale 在性能方面也优于专用向量数据库,参考文末拓展阅读。如下图所示,完整的 SQL 支持和高性能的向量搜索集合,使MyScale 成为了管理 AI/LLM 相关数据(结构化数据与向量数据)非常有竞争力的选择。

基准设置

我们对MyScale、OpenSearch 和两个 Postgres 向量搜索插件进行了基准测试。设置详情如下:

数据库

Pod 类型

每月成本(美元)

备注

MyScale

Pod 大小:x1

120

目前基础开发版可免费使用

Postgres 的 pgvector 插件

db.r6g.xlarge(4核32GB)

329

Amazon RDS for PostgreSQL

Postgres 的 pgvecto.rs 插件

db.r6g.xlarge(4核32GB)

329

Amazon RDS for PostgreSQL

AWS OpenSearch Service

r6g.2xlarge.search(8核64GB)

488

Amazon OpenSearch Service

我们使用了 500 万个 768 维的向量进行向量搜索和过滤向量搜索测试,需要说明的是这些向量是从 LAION 2B 图像数据集生成的。

注意:完整的代码、数据集和结果可以在我们的基准测试页面上(链接见拓展阅读2)找到。

我们为每个数据库选择了最小的 Pod 类型,来托管所有向量。

由于最新版本的 pgvector 和 pgvector.rs 尚未被 PostgreSQL 云服务广泛采用,我们在运行基准测试时选择了自行托管。不过为了进行比较,我们在上表中使用了 Amazon RDS for PostgreSQL 的定价。

注意:PostgresSQL 云服务(如 Supabase 和 TimeScaleDB)在类似硬件配置情况下成本可能会更高。

OpenSearch 的 Pod 类型,我们选择了 r6g.2xlarge.search(64GB 内存),因为在 r6g.xlarge.search(32GB 内存)实例上构建向量索引时遇到了一些问题总的来说,MyScale 仍然是最具成本效益的集成向量数据库。

基准结果

向量搜索

在下图中,x 轴表示准确性(precision),y 轴表示每个向量数据库的吞吐量(query per second, QPS)。我们发现:

向量搜索的吞吐量

过滤向量搜索

在实际情况下,纯向量搜索远远不够。向量通常带有元数据,用户需要对这些元数据应用一个或多个过滤器。

下图描述了MyScale (以及其他集成向量数据库)在具有 1% 过滤比的数据集上的 QPS1% 的过滤比意味着在应用了过滤条件后仍剩余 50K 个向量(1% x 5M 个向量)。

过滤向量搜索的吞吐量

我们的研究结果如下:

通常来说,在数据库中进行过滤向量搜索,有两种方法:

后过滤

后过滤方法是指先进行向量搜索,然后删除不符合过滤条件的结果。不过使用这种方法有两个比较大的缺点:

  1. 搜索中的元素数量不可预测,因为过滤条件是应用在已经减少候选向量的列表。
  2. 如果过滤条件非常严格,比如相对数据集容量,仅有小部分的数据点与过滤条件匹配,那么原始向量搜索有可能不会包含任何匹配结果

前过滤

pgvector OpenSearch 的准确性低归因于它们使用的是后过滤。与之相对,MyScale pgvector.rs 采用了另一种方法——前过滤。首先应用过滤器,然后将位图传递给向量索引来执行向量搜索。

在我们的基准测试中,pgvector.rs 使用的 HNSW 算法在过滤比低的时候性能较差。此外,PostgreSQL 是行存数据库,这对前过滤所需的大规模扫描操作并不友好,会进一步加剧性能下降。而MyScale 结合 ClickHouse 的快速列式 SQL 执行引擎而开发,再加上专有的 MSTG 向量索引算法克服了这个问题。

评估成本效益:纯向量搜索与过滤向量搜索

在选择数据库时,不仅要考虑原始性能,还要考虑投入产出比。对企业而言,成本效益成为了是否广泛应用向量搜索的关键标准,特别是在高准确性水平(如95%)下的成本效益。

纯向量搜索

为了清晰了解成本效益,我们通过测试每个数据库的每月成本与约 95% 准确性下实现的每秒查询数(QPS)的关系,得出了每个数据库的性能成本,从而提供了每个数据库每 100 QPS 的成本的指标。

如下所示的结果表明,MyScale 成本效益的优势是非常明显的,比最接近其的一个数据库高出 至少1.8 倍。

数据库

每月成本(美元)每 100 QPS

MyScale

30

pgvector

54

pgvecto.rs

79

OpenSearch

613

1% 过滤比下的过滤向量搜索

然而许多实际情况不仅要求进行纯向量搜索,还要对数据集进行过滤,来缩小结果范围。当我们评估 1% 过滤比的过滤向量搜索的成本效益时,情况发生了变化。值得注意的是,pgvector 和 OpenSearch 无法实现超过 50% 的准确性。这种低准确性使得数据库在大多数情况下是不可用的,在此分析中标记为 N/A。

数据库

每月成本(美元)每 100 QPS

MyScale

96

pgvector

N/A

pgvecto.rs

3290

OpenSearch

N/A

总的来说,MyScale 在纯向量搜索中保持领先,在过滤向量搜索中,优势则更加明显。

索引构建时间

在向量数据库中插入向量后,用户必须在执行向量搜索之前创建一个向量索引。构建索引所需的时间对于快速返回搜索结果至关重要,下表中列出了四种向量数据库的构建时间:

数据库

上传和构建时间

MyScale

32 分钟

pgvector

10.9 小时

pgvecto.rs

80 分钟

OpenSearch

45 分钟

上面的结果表明,MyScale 的索引构建时间明显更短,而 pgvector 由于缺乏并行构建支持,在构建 HNSW 向量索引时非常慢。快速构建索引在应用程序需要插入和更新大量向量的情况下(例如大规模在线聊天、文档编辑等)至关重要,另一方面也有利于减少索引构建和向量搜索之间的资源抢占。

结论

根据上面的分析结果,MyScale 始终保持优势地位,在过滤向量搜索和快速索引构建时间方面表现优异。在所有经过测试的产品中,MyScale 是唯一一个在各种过滤比下提供高搜索精度和 QPS 的集成向量数据库。

而 MyScale 优于其他产品的另外一个特点是其出色的成本效益。所以,对于希望充分利用集成向量数据库能力的企业来说,MyScale 既可以提供强大的性能表现,又可以降低使用成本,不失为一个优质选择

  • 25
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个错误是由于Java程序在运行时找不到指定的类而引起的。在这种情况下,错误信息是"Exception in thread "main" java.lang.ClassNotFoundException: org.postgresql.Driver"。 这个错误通常发生在Java程序需要使用某个特定的类,但在编译或运行时找不到该类的情况下。在这个例子中,程序试图加载名为"org.postgresql.Driver"的类,但是找不到该类。 解决这个错误的方法是确保所需的类在Java的类路径上可用。这可以通过将所需的类文件或JAR文件添加到类路径上来实现。在这个例子中,需要将"org.postgresql.Driver"的类文件或JAR文件添加到类路径上。 具体的步骤如下: 1. 确认你已经正确地安装了必要的数据库驱动程序。 2. 在你的Java项目中,将数据库驱动程序的JAR文件复制到项目的lib文件夹中。 3. 在你的Java项目的构建路径中,添加数据库驱动程序的JAR文件。 4. 在你的代码中,确保正确地引用了数据库驱动程序的类。 通过遵循上述步骤,你应该能够解决"Exception in thread "main" java.lang.ClassNotFoundException: org.postgresql.Driver"错误,并成功加载所需的类。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [java.lang.ClassNotFoundException:如何解决](https://blog.csdn.net/dnc8371/article/details/106706472)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Exception in thread main java.lang.NoClassDefFoundError错误解决方法](https://download.csdn.net/download/weixin_38632146/12794706)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值