tensorchord/vchord-postgresVectorChord(简称vchord)是一个PostgreSQL扩展,专为可扩展、高性能且磁盘高效的向量相似性搜索设计,是pgvecto.rs项目的继任者。该扩展基于Postgres存储系统构建,支持物理复制和WAL增量备份,能有效利用SSD资源降低内存需求,轻松处理数亿至数十亿级别的向量数据。
适用于需要向量相似性搜索的各类应用场景,包括但不限于:
特别适合资源受限环境下的大规模向量处理,可在AWS i4i.xlarge(4 vCPUs、32GB RAM)等中端配置服务器上高效运行。
使用以下命令启动VectorChord容器:
bashdocker run \ --name vectorchord-demo \ -e POSTGRES_PASSWORD=mysecretpassword \ -p 5432:5432 \ -d tensorchord/vchord-postgres:pg17-v0.1.0
通过psql连接到数据库:
bashpsql -h localhost -p 5432 -U postgres
运行以下SQL启用vchord扩展:
sqlCREATE EXTENSION IF NOT EXISTS vchord CASCADE;
将vchord.so添加到postgresql.conf的shared_preload_libraries:
sql-- 添加vchord到shared_preload_libraries ALTER SYSTEM SET shared_preload_libraries = 'vchord.so';
创建VectorChord RaBitQ(vchordrq)索引:
sqlCREATE INDEX ON gist_train USING vchordrq (embedding vector_l2_ops) WITH (options = $ residual_quantization = true [build.internal] lists = [4096] spherical_centroids = false $);
查询语句与pgvector完全相同,支持任何过滤操作及WHERE/JOIN子句:
sqlSELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
支持的距离函数:
<-> - L2距离<#> - (负)内积<=> - 余弦距离可通过调整probes和epsilon参数优化搜索性能:
sql-- 设置probes控制扫描的列表数量,建议值为总lists的3%–10% SET vchordrq.probes = 100; -- 设置epsilon控制重排序精度,值越大召回率越高 -- 建议范围:1.0–1.9,默认值为1.9 SET vchordrq.epsilon = 1.9; -- 配置预加载维度以减少延迟,需要重启数据库生效 -- 默认值:'64,128,256,384,512,768,1024,1536' ALTER SYSTEM SET vchordrq.prewarm_dim = '64,128,256,384,512,768,1024,1536';
PostgreSQL性能调优设置:
sql-- 使用SSD时,设置effective_io_concurrency为200以加快磁盘I/O SET effective_io_concurrency = 200; -- 禁用JIT编译(收益有限且增加单查询开销) SET jit = off; -- 分配至少25%的总内存给shared_buffers,磁盘密集型工作负载可增至90% -- 需要重启数据库生效 ALTER SYSTEM SET shared_buffers = '8GB';
通过以下SQL预热索引,在内存有限时显著提升性能:
sql-- 将索引预热到共享缓冲区 SELECT vchordrq_prewarm('gist_train_embedding_idx'::regclass);
索引构建支持并行化,通过以下设置优化并行度:
sql-- 设置为可用CPU核心数 SET max_parallel_maintenance_workers = 8; SET max_parallel_workers = 8; -- 调整工作进程总数,需要重启数据库生效 ALTER SYSTEM SET max_worker_processes = 8;
对于大型数据集(>500万向量),建议使用外部索引预计算:
sql-- 创建质心表 CREATE TABLE public.centroids (id integer NOT NULL UNIQUE, parent integer, vector vector(768)); -- 插入质心数据 INSERT INTO public.centroids (id, parent, vector) VALUES (1, NULL, '{0.1, 0.2, 0.3, ..., 0.768}'), (2, NULL, '{0.4, 0.5, 0.6, ..., 0.768}'), (3, NULL, '{0.7, 0.8, 0.9, ..., 0.768}'); -- ...更多质心
sqlCREATE INDEX ON gist_train USING vchordrq (embedding vector_l2_ops) WITH (options = $ [build.external] table = 'public.centroids' $);
bashcargo install --locked cargo-pgrx cargo pgrx init --pg17 $(which pg_config) # 使用系统PostgreSQL初始化 cargo pgrx install --release --sudo # 安装扩展到系统PostgreSQL
f32数据类型的向量本项目采用GNU Affero General Public License v3.0许可协议。商业许可请联系***。

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务