跳转到主要内容

vchord 1.1.1 · PostgreSQL 13–18 · pgvecto.rs 的继任者

可扩展的向量检索为 PostgreSQL 而生

每 1 美元即可存储 40 万条向量,20 分钟完成 1 亿条向量索引构建。 基于 RaBitQ 4-bit/8-bit 量化、磁盘友好型倒排索引(vchordrq)、 高吞吐图索引(vchordg)、MaxSim 多向量检索,原生兼容 pgvector 生态。

派生自 tensorchord/VectorChord · 由 Pigsty 社区维护 · AGPL-3.0 开源许可

了解 vchord 1.1 新特性

亿级规模生产验证

以极低内存开销实现企业级向量检索规模

基于 GIST-1M、Cohere-10M 与 LAION-100M 数据集,与 HNSW 及主流专用向量数据库进行全方位基准对比。

400k / $1每美元存储向量数在 AWS 上每美元可存储向量数为 pgvector HNSW 的 26 倍查看基准测试
20 分钟1 亿向量索引构建支持外部预计算构建索引,数据库内构建速度提升 6 倍以上查看基准测试
16×写入吞吐提升相比全内存 HNSW 显著降低写放大与写入开销查看基准测试
95%+Recall@10 召回率RaBitQ4 与 RaBitQ8 提供具备严格理论误差下界的距离估计查看基准测试

核心引擎架构

兼顾磁盘扩展性、内存高吞吐与混合检索

vchord 将 SIGMOD'24 RaBitQ 量化算法与 PostgreSQL 原生页面存储、WAL 日志及缓冲区管理器深度结合。

01 / VCHORDRQ · 磁盘友好型 IVF

无需耗尽内存即可承载亿级向量

◇ 层次化 K-Means 聚类 + RaBitQ 4/8-bit 残差量化

  • 32 位浮点向量压缩 8× 至 32×,具备严格理论误差下界
  • 仅聚类质心常驻内存,量化倒排链通过异步 I/O 从 SSD 流式读取
  • 支持多节点或 GPU 外部预计算构建索引,生产库 CPU 零争用

单台 32 GB 内存 PostgreSQL 节点即可扩展至数亿向量。

vchordrq.sql
-- 启用 vchord(自动加载 pgvector)
CREATE EXTENSION IF NOT EXISTS vchord CASCADE;
-- 构建层次化 RaBitQ 倒排索引
CREATE INDEX items_emb_idx ON items
  USING vchordrq (embedding vector_l2_ops)
  WITH (options = $$
    residual_quantization = true
    [build.internal]
    lists = [4096]
  $$);

02 / VCHORDG · 高吞吐图索引

告别 HNSW 膨胀的低延迟图检索

◇ 面向延迟敏感负载的单层 RaBitQ 图索引

  • 消除多层 HNSW 内存开销,实现 2×–5× QPS 与更低 P99 延迟
  • 相比 pgvector HNSW,索引体积缩减 50%,构建提速 4×
  • 原生支持 vector、halfvec 与 vector[] 多向量类型

当热数据集可放入内存且追求极致 QPS 时的理想替代方案。

vchordg.sql
-- 基于 RaBitQ8 的高 QPS 图索引
CREATE INDEX items_graph_idx ON items
  USING vchordg (embedding vector_ip_ops)
  WITH (options = $$
    m = 32
    ef_construction = 64
    alpha = [1.0, 1.2]
    bits = 8
  $$);

03 / MAXSIM · 多向量晚期交互

在 SQL 中原生运行多向量重排

◇ 基于 WARP 动态剪枝的原生 vector[] 多向量索引

  • 原生支持 vector[] 词元级文档嵌入与 @# 操作符索引
  • 基于 RaBitQ 聚类质心实现 WARP 剪枝,动态跳过无关词元
  • 直接驱动 ColPali 视觉文档检索与 ColBERTv2 细粒度重排

无需部署外部重排序集群,复杂查询检索准确率最高提升 70%。

maxsim_colbert.sql
-- 将每个词元的嵌入向量存储为 vector(128)[]
CREATE TABLE docs (id bigserial, embs vector(128)[]);
CREATE INDEX ON docs USING vchordrq (embs vector_maxsim_ops)
  WITH (options = $$ [build.internal] lists = [1000] $$);
-- 使用 MaxSim (@#) 操作符执行检索
SELECT id FROM docs
  ORDER BY embs @# ARRAY['[0.1, ...]']::vector[]
  LIMIT 10;

04 / VCHORD 家族 · 混合检索套件

PostgreSQL 一站式检索全家桶

◇ 协同组合 vchord、vchord_bm25 与 pg_tokenizer

  • vchord:基于 RaBitQ 量化的磁盘倒排与高吞吐单层图向量索引
  • vchord_bm25:基于 Block-WeakAnd 算法的原生 BM25 倒排索引
  • pg_tokenizer:数据库内多语言词法分析与预训练词表分词器

在单条 SQL 中通过 RRF 或 ColBERT 融合向量语义与全文检索。

文档导航

探索完整的 Vchord 技术文档

涵盖从快速上手 SQL 与生产环境调优,到 BM25 全文排序、多语言分词器、工程深度解析博客以及 pgvecto.rs 历史归档的全部内容。

核心向量引擎 · v1.1.1

vchord 核心文档

安装部署、vchordrq 与 vchordg 索引构建、MaxSim 多向量检索、范围过滤、性能调优、外部索引构建与 SQL 参考手册。

进入章节

原生 BM25 与分词器

vchord_bm25 与 pg_tokenizer

Okapi BM25 相关性排序、Block-WeakAnd Top-K 索引扫描、预过滤检索、RRF/ColBERT 混合检索融合以及 pg_tokenizer 多语言分词器。

进入章节

37 篇深度技术文章与发布说明

工程博客与版本发布

深入剖析 RaBitQ 量化、亿级至十亿级向量基准测试、DiskANN 与 HNSW 对比、BM25 Block-WAND、ColBERT WARP 及历次版本发布说明。

进入章节

性能与 TCO 对比

基准测试与成本分析

基于 GIST-1M、Cohere-10M 与 LAION-100M 的可复现基准测试,全方位对比 vchord 与 pgvector、pgvectorscale、Elasticsearch 及 Qdrant。

进入章节

多语言与预训练词表

pg_tokenizer 分词指南

文本分析流水线、预分词器(Unicode、正则、结巴中文、Lindera 日文)、词干提取、停用词、同义词与自定义语料模型训练。

进入章节

前代产品参考手册

pgvecto.rs 归档与迁移

pgvecto.rs(v0.1–v0.4)完整历史技术文档,以及将现有 pgvecto.rs 生产部署平滑迁移至 vchord 的分步指南。

进入章节

快速上手

三步运行 vchord

启动本地容器或通过 Pigsty 安装原生软件包,启用扩展,即可执行你的第一次向量相似度检索。

  1. 启动内置 vchord 的 PostgreSQL

    运行预构建的 Docker 镜像(已内置 vchord 与 pgvector),或通过 Pigsty / 原生软件包安装。

    docker run -d --name vchord -e POSTGRES_PASSWORD=postgres -p 5432:5432 tensorchord/vchord-postgres:pg18-v1.1.1
  2. 启用扩展

    使用 psql 连接数据库并启用 vchord(CASCADE 会自动启用 vector 扩展)。

    psql -h 127.0.0.1 -U postgres -c "CREATE EXTENSION IF NOT EXISTS vchord CASCADE;"
  3. 创建 vchordrq 索引并执行查询

    在 vector 或 halfvec 列上使用 vchordrq 创建索引,并使用标准的 <->、<#> 或 <=> 操作符进行检索。

    psql -h 127.0.0.1 -U postgres -c "CREATE INDEX ON items USING vchordrq (embedding vector_l2_ops);"

常见问题

了解 Vchord 家族与 pgsty/vchord

vchord 与 pgvector、pgvecto.rs 是什么关系?

vchord 是 pgvecto.rs 的下一代架构继任者,围绕 SIGMOD'24 RaBitQ 量化算法以及 PostgreSQL 原生页面存储与 WAL 复制机制重新设计。不同于 pgvecto.rs,vchord 直接复用 pgvector 标准的 vector 和 halfvec 数据类型以及 <->、<#>、<=> 操作符,因此现有的 pgvector 应用只需切换索引访问方法 (USING vchordrq 或 USING vchordg),无需改写业务查询语句。详见迁移指南。

什么时候应该选择 vchordrq,什么时候选择 vchordg?

对于大规模数据集(100 万至 1 亿+ 向量)、成本敏感型部署、高写入/更新吞吐场景,或当向量规模超出可用内存时, 请选择 vchordrq(RaBitQ 倒排文件索引)。当工作集可以轻松放入内存,且你需要极致的 QPS 与极低的单次查询延迟、 同时希望避免 HNSW 多层图结构的内存膨胀时,请选择 vchordg(RaBitQ 图索引)。两者详细对比请参阅索引指南。

什么是 RaBitQ?为什么 vchord 1.1 新增了 RaBitQ8?

RaBitQ(随机比特量化)可将 32 位浮点向量压缩为紧凑的 4-bit(bits = 4,默认)或 8-bit(bits = 8)表示,具备严格的理论误差上界,并支持硬件加速的 SIMD 内积估计。4-bit RaBitQ 已能满足绝大多数场景, 而 RaBitQ8 针对高度聚集或分布极度偏斜的向量数据集,在重排序前即可提供近乎无损的距离估计精度。欢迎阅读 RaBitQ 与 IVF 深度解析。

为什么 Pigsty 社区要维护 Vchord 扩展家族?

pgsty/vchord、pgsty/vchord_bm25、 pgsty/pg_tokenizer 与 vchord.pgsty.com 由 Pigsty 社区维护, 旨在保障该项目的长期开源连续性,为 Enterprise Linux、Debian 与 Ubuntu 上的 PostgreSQL 13–18 提供可复现的 RPM/DEB 软件包, 并提供完整、快速、本地优先的中英双语技术文档与工程文章归档。详见署名与来源说明。

准备好在 PostgreSQL 中扩展向量与全文检索了吗?阅读快速开始指南,查阅 SQL 参考手册,或深入探索工程技术博客。