VectorChord:高效向量搜索的 PostgreSQL 扩展
项目介绍
VectorChord 是一个为 PostgreSQL 设计的向量相似度搜索扩展,具有高可扩展性、高性能和磁盘效率。该项目允许用户在 AWS i4i.xlarge 实例上轻松托管超过250GB的768维向量(100百万个),每月仅需250美元。VectorChord 通过优化的数据结构和算法,在保证搜索质量的同时,显著降低了基础设施成本。
项目技术分析
VectorChord 采用了多种先进技术来提升向量搜索的性能和效率:
- RaBitQ 压缩:利用 RaBitQ[^3] 压缩算法,VectorChord 能够在保持搜索质量的同时,高效存储向量。
- IVF 索引:VectorChord 使用 IVF(Inverted File)索引,该索引将向量分为多个列表,搜索时仅查询与查询向量最近的列表,从而加速搜索过程。
- 长向量支持:VectorChord 能够存储和搜索高达60,000维的向量,满足高维模型的需求。
[^3]: Gao, Jianyang, and Cheng Long. "RaBitQ: Quantizing High-Dimensional Vectors with a Theoretical Error Bound for Approximate Nearest Neighbor Search." Proceedings of the ACM on Management of Data 2.3 (2024): 1-27.
项目及技术应用场景
VectorChord 适用于需要高效向量搜索的场景,如:
- 文本搜索:在处理大规模文本数据时,VectorChord 可以快速检索相似的文本向量。
- 推荐系统:通过向量搜索,推荐系统能够找到与用户兴趣最匹配的项。
- 图像识别:在大规模图像数据集中,VectorChord 可以用于快速查找相似的图像特征向量。
项目特点
VectorChord 在以下方面具有显著特点:
- 性能提升:与 pgvector 相比,VectorChord 提供了高达5倍的查询速度和16倍更高的插入吞吐量。
- 成本效益:在相同的成本下,VectorChord 可以存储比 Pinecone 多6倍的向量,比 pgvector/pgvecto.rs 多26倍。
- 无缝集成:完全兼容 pgvector 数据类型和语法,无需手动参数调整即可提升性能。
- 快速索引构建:利用外部 IVF 索引构建,结合 RaBitQ 压缩,VectorChord 能够实现快速的索引构建。
下面是关于 VectorChord 的详细探讨:
性能对比
根据 MyScale Benchmark^1 的测试结果,VectorChord 在768维向量上的查询速度和索引构建时间均优于 pgvector 的 HNSW 实现。
存储和索引
VectorChord 使用与 pgvector 类似的数据类型,使得迁移过程更加便捷。用户可以轻松创建带有向量列的表,并插入数据:
CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
INSERT INTO items (embedding) SELECT ARRAY[random(), random(), random()]::real[] FROM generate_series(1, 1000);
创建索引时,用户可以根据需要选择不同的距离度量方法和索引参数:
CREATE INDEX ON items USING vchordrq (embedding vector_l2_ops) WITH (options = $$
residual_quantization = true
[build.internal]
lists = [1000]
spherical_centroids = false
$$);
使用场景
VectorChord 的设计使其适用于多种场景,包括但不限于:
- 大规模向量数据库:在大规模向量数据集中快速搜索相似向量。
- 云服务:利用云服务的高性能计算资源,实现快速的向量搜索。
- 机器学习模型:在机器学习模型训练和推理过程中,快速检索相关向量。
结论
VectorChord 是一个功能强大、性能卓越的 PostgreSQL 扩展,适用于各种需要向量搜索的应用场景。其高效的索引构建和查询性能,以及对长向量的支持,使其成为处理大规模高维数据的理想选择。对于追求性能和成本效益的用户来说,VectorChord 是一个值得尝试的开源项目。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考