pgvecto.rs 向量数据库FDW性能测试与分析
2025-07-05 20:50:27作者:廉彬冶Miranda
在数据库扩展领域,PostgreSQL Foreign Data Wrapper(FDW)是一种强大的功能,它允许用户将外部数据源当作本地表来查询。本文将深入探讨pgvecto.rs项目中关于FDW性能测试的技术细节,特别是向量数据库在跨服务器查询时的延迟表现。
测试背景与目的
pgvecto.rs是一个基于PostgreSQL的向量搜索扩展,它提供了高效的向量索引和查询能力。在实际应用中,用户可能需要通过FDW机制访问远程服务器上的向量数据。本次测试的主要目的是评估这种跨服务器查询的性能表现,特别是延迟和吞吐量指标。
测试环境搭建
测试环境需要配置两个PostgreSQL实例:
- 远程服务器:运行pgvecto.rs扩展,存储向量数据
- 本地服务器:配置postgres_fdw扩展,通过FDW访问远程数据
在远程服务器上,我们创建了包含10万条64维向量的测试表,并建立了向量索引。同时创建了专门的fdw_user用户用于FDW连接。
本地服务器配置了postgres_fdw扩展,建立了到远程服务器的连接映射,并通过IMPORT FOREIGN SCHEMA命令将远程表映射为本地外部表。
关键测试代码
测试主要包含两部分SQL操作:
- 远程服务器直接查询:
-- 创建测试表
CREATE TABLE remote (
id serial primary key,
vec vector(64) not null
);
-- 插入测试数据
INSERT INTO remote (vec)
SELECT array_fill(random(), array[64])::real[]
FROM generate_series(1, 100000);
-- 创建向量索引
CREATE INDEX ON remote USING vectors (vec vector_l2_ops);
-- 执行向量相似度查询
SELECT id, vec <-> array_fill(0.5, array[64])::real[] as rank
FROM remote
ORDER BY rank
LIMIT 10;
- 本地通过FDW查询:
-- 配置FDW连接
CREATE SERVER remote_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (
host 'xxx.pooler.supabase.com',
dbname 'postgres',
port '5432',
extensions 'vector'
);
-- 执行FDW查询
SELECT id, vec <-> array_fill(0.5, array[64])::vector as rank
FROM remote
ORDER BY rank
LIMIT 10;
性能分析与结论
测试结果表明,FDW查询的主要性能瓶颈在于网络延迟。在AWS US-west2a区域内的测试中,跨服务器查询的延迟大约在几毫秒级别。
值得注意的是,当远程服务器使用pgvector扩展(vector类型)而本地使用pgvecto.rs扩展(vectors类型)时,会出现类型不兼容的问题。这需要通过特殊配置解决,确保两端使用兼容的数据类型。
实际应用建议
对于生产环境部署,建议考虑以下几点:
- 尽量将需要频繁联合查询的表放在同一服务器上,避免FDW带来的网络开销
- 如果必须使用FDW,应考虑服务器之间的网络延迟和带宽
- 确保两端使用兼容的向量类型和操作符
- 对于大规模向量搜索,考虑在远程服务器完成搜索后只返回必要的结果集
通过合理的架构设计和性能优化,pgvecto.rs的FDW功能可以有效地支持分布式向量搜索场景。
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0216
cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。Jupyter Notebook0138
uni-appA cross-platform framework using Vue.jsJavaScript08
GLM-5.2智谱开源 GLM-5.2,这是针对长文本任务的最新旗舰模型。相较于前代产品 GLM-5.1,它在长文本任务处理能力上实现了显著飞跃,并且首次在稳定的 100 万 token 上下文中提供这一能力。Jinja00
SwanLab⚡️SwanLab - an open-source, modern-design AI training tracking and visualization tool. Supports Cloud / Self-hosted use. Integrated with PyTorch / Transformers / LLaMA Factory / veRL/ Swift / Ultralytics / MMEngine / Keras etc.Python00
tiny-universe《大模型白盒子构建指南》:一个全手搓的Tiny-UniverseJupyter Notebook03
热门内容推荐
最新内容推荐
项目优选
收起
deepin linux kernel
C
32
16
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
471
465
Ascend Extension for PyTorch
Python
758
968
昇腾LLM分布式训练框架
Python
185
231
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
698
1.4 K
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
878
2.03 K
暂无描述
Dockerfile
780
5.08 K
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
70
22
本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。
Dart
1.04 K
271
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed.
Get Started
Rust
2.08 K
216