vchord
概览
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 1810 | vchord | 否 | 是 | 是 | 是 | 否 | 是 | - |
| 相关扩展 | vector vector vectorscale pgcontext vectorize pg_rrf pg_search vchord_bm25 pg_bestmatch pgml pg4ml |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 1.1.1 | 1817161514 | vchord | vector |
| RPM | PIGSTY | 1.1.1 | 1817161514 | vchord_$v | pgvector_$v |
| DEB | PIGSTY | 1.1.1 | 1817161514 | postgresql-$v-vchord | postgresql-$v-pgvector |
构建
您可以使用 pig build 命令构建 vchord 扩展的 RPM / DEB 包:
安装
您可以直接安装 vchord 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
使用 pig 或者是 apt/yum/dnf 安装扩展:
预加载配置:
创建扩展:
用法
将此扩展添加到 postgresql.conf 中的 shared_preload_libraries 配置项
在 embedding 列上创建索引:
文档
查询
查询语句与 pgvector 完全相同。VectorChord 支持任意过滤操作以及 WHERE/JOIN 子句,就像 pgvecto.rs 的 VBASE 一样。
支持的距离函数包括:
<->- L2 距离<#>- (负)内积<=>- 余弦距离
由于 PostgreSQL 查询规划器的限制,我们无法直接支持类似
SELECT embedding <-> '[3,1,2]' as distance WHERE distance < 0.1 ORDER BY distance的范围查询。
要查询特定距离范围内的向量,可以使用以下语法。
查询性能调优
可以通过调整 probes 和 epsilon 参数来优化搜索性能:
以及 PostgreSQL 本身的设置:
索引预热
要预热索引,可以使用以下 SQL。在内存有限的情况下,这将显著提升性能。
索引构建时间
索引构建可以通过索引选项中的 build_threads 参数和 PostgreSQL 设置来实现并行化。使用以下设置优化并行度:
索引构建进度
可以通过查询 pg_stat_progress_create_index 视图来查看索引构建进度。
外部索引预计算
与内部构建不同,外部索引预计算会在 PostgreSQL 之外完成分区计算,再将得到的质心写入 PostgreSQL 表。对于大型数据集,这可以减少数据库侧的构建时间和内存占用。
首先,需要使用 faiss、scikit-learn 或其他聚类库对向量进行聚类。
质心需要预先存储在一个任意名称的表中,该表包含 3 列:
- id(integer):每个质心的 ID,必须唯一
- parent(integer,可为空):每个质心的父 ID,普通聚类时应为 NULL
- vector(vector):每个质心的向量表示,使用
pgvector的 vector 类型
示例如下:
完整流程与质心表要求请参阅官方 External Build 文档。
限制
- 架构兼容性:快速扫描内核针对 x86_64 架构进行了优化。虽然可以在 aarch64 上运行,但性能可能较低。
构建
构建此扩展需要 clang-17+。
在 EL 8/9、Ubuntu 24.04 上可直接使用,但在 Ubuntu 22.04 / Debian 12 上需要手动安装。
例如,在 Ubuntu 22 / Debian 12 上安装 clang-18 并将其设置为默认的 clang: