Ricardo Zavaleta:Postgres 向量搜索方法的基准测试:Pgvector 与 Lantern

Ricardo Zavaleta:Postgres 向量搜索方法的基准测试:Pgvector 与 Lantern

💡 原文英文,约1300词,阅读约需5分钟。
📝

内容提要

最近几个月,Postgres中的向量搜索领域发展迅猛。Pgvector和Lantern是两个基于Postgres的向量数据库,本文对它们进行了比较和基准测试。Pgvector在吞吐量、延迟和召回率方面表现更好。

🔎

延伸解读

索引构建与查询性能的权衡

基准测试显示,Lantern 在索引创建时间和索引大小上占优,而 Pgvector 在查询吞吐量和延迟上表现更好。例如,在 m={8,16}、ef_construction=128 的参数下,Pgvector 的构建时间是 Lantern 的 1.71-1.73 倍,索引大 13%-15%,但每秒查询数高 44%-53%,延迟低 29%-35%。这种差异反映了两种扩展在设计上的不同取舍:Lantern 优化了索引构建效率,Pgvector 则更注重查询性能。

召回率表现接近,Pgvector 略优

在召回率方面,两个扩展的表现相似,但 Pgvector 在大多数参数组合下略好一些。例如,在 m={16,24}、ef_construction=200 时,Pgvector 的召回率是 Lantern 的 1.00-1.09 倍。随着 ef_search 的增加,两者的召回率逐渐接近。这意味着对于召回率要求极高的场景,Pgvector 可能稍有优势,但差距不大。

生态与成熟度:Pgvector 更普及

Pgvector 拥有更广泛的用户基础和社区支持,GitHub 星数超过 7.6K,且被大多数托管 Postgres 提供商支持,易于获取和使用。Lantern 是一个年轻的项目,星数超过 400,但正在积极开发中。两者都支持 HNSW 索引,API 相似,学习成本低。选择时需考虑团队对成熟度和生态支持的偏好。

❓

Q&A

Pgvector 和 Lantern 在索引创建时间和索引大小上哪个更有优势?

Lantern 在索引创建时间和索引大小上更有优势。根据基准测试,Pgvector 的索引创建时间比 Lantern 慢 1.71 到 1.73 倍(在另一组参数下为 1.92 到 2.35 倍),并且生成的索引大小比 Lantern 大 13% 到 15%(另一组参数下为 13% 到 20%)。

在吞吐量和延迟方面,Pgvector 和 Lantern 的表现如何?

Pgvector 在吞吐量和延迟方面表现更好。测试显示,Pgvector 每秒可处理比 Lantern 多 44% 到 53% 的查询(另一组参数下为 42% 到 84%),并且延迟低 29% 到 35%(另一组参数下为 30% 到 45%)。

Pgvector 和 Lantern 在召回率上有什么区别?

两者的召回率相似,但 Pgvector 略好一些。在大多数测试中,Pgvector 的召回率与 Lantern 相当或稍高(相对值在 1.00 到 1.09 之间)。

Pgvector 和 Lantern 的语法和易用性如何?

两者都支持 HNSW 索引,并且 API 相似。如果你熟悉其中一个扩展,可以很容易地理解另一个的使用方法,没有大的复杂性问题。

Pgvector 和 Lantern 各自支持哪些索引类型和距离度量?

Pgvector 支持 IVVFlat 和 HNSW 索引,距离度量包括 L2、内积和余弦距离。Lantern 支持 HNSW 索引,距离度量包括 L2、余弦和汉明距离。

Pgvector 和 Lantern 的社区活跃度和支持情况如何?

Pgvector 更受欢迎,GitHub 上有 7.6K 星,并且被大多数托管 Postgres 提供商支持,易于访问。Lantern 是一个年轻的项目,GitHub 上有超过 400 星,正在积极开发中。

🏷️

标签

➡️

继续阅读