关注【云引】——云原生、数据治理、人工智能应用技术宅灵感补给池,每天 3 分钟,沉淀干货,极客开脑洞!
⏩嫌长不想看>>浓缩版本
pgvector给PostgreSQL插上向量计算的翅膀,使其在人工智能领域尽情翱翔。
pgvector 将向量数据与结构化业务数据无缝融合存储,支持多种向量类型和距离算法,通过 HNSW 和 IVFFlat 索引实现毫秒级 Top-K 检索。其核心优势在于原生继承 PostgreSQL 的 ACID 事务特性和 SQL 标准,允许在单条 SQL 中实现向量相似性搜索与结构化过滤、JOIN 操作的完美结合,直接支撑推荐系统、智能搜索、RAG 系统等复杂业务场景,无需引入额外复杂系统,为中小规模 AI 应用提供了成本效益极高的向量数据库解决方案。
引言
“PostgreSQL is the Linux of Database”,拿PostgreSQL和Linux比较,说明其具有内核精简,接口开放,扩展更是无锁化的特点。利用开源社区将存储引擎、索引、数据类型等,甚至云原生能力,都插件化成为Postgresql的开源项目,这使得它拥有了一个庞大且充满活力的生态系统。
PostgreSQL的扩展点足够多,从数据类型到后台Worker,全部通过C API公开。许可证宽松,允许闭源商业化,解除了后顾之忧。MVCC(多版本并发控制)和WAL(预写日志)提供的事务性和一致性极其稳定的底座,并提供插件级隔离(Hooks & Resource Owner),上层扩展无需从头开始。PostgreSQL还完美复用SQL标准与工具链,任何BI、ORM都能即插即用,成本几乎为零。
基于开源这片沃土上,pgvector应运而生,它像给PostgreSQL插上了智能的翅膀,使其在向量计算领域大放异彩。
向量数据库核心功能
向量数据库
把信息编码为高维数值向量,提供各种向量相似度算法,并在毫秒级返回最相似的匹配结果,实现高维数值向量语义检索。
说人话大致可以拆解为以下三个核心内容:
1. 用固定维度的浮点数组统一表示和存储任何对象(文本、图片、音频、用户行为)。
2. 用距离算法(L2、余弦、内积…)计算两个向量的相似度量,通常距离越小表示语义越近。
3. 通过 HNSW / IVF 等索引,实现毫秒级 Top-K 检索,在海量向量里秒回最相似的 K 条结果。
细说pgvector
有了PostgreSQL的加持,pgvector可以说是"站在了巨人的肩膀上", PostgreSQL允许用户将pgvector的向量数据与现有的结构化业务数据一同存储,并能像处理普通数据一样对其进行操作。兼容SQL语义体系,用户可以在SQL语句中将向量相似性搜索与结构化过滤、全文检索、复杂的JOIN操作以及事务处理无缝结合。这种紧密的结合使得PostgreSQL能够直接支撑推荐系统、智能搜索、检索增强生成RAG系统等多种复杂的AI应用场景。pgvector支持精确和近似最近邻搜索,提供多种向量类型和距离算法,可通过任何Postgres客户端进行访问。原生继承了PostgreSQL的ACID事务特性和时间点恢复能力,确保了数据的一致性和可靠性,无需引入额外的复杂系统。
pgvector基本用法
1.基础相似性搜索
-- 创建向量表
CREATE TABLE items (
id bigserial PRIMARY KEY,
embedding vector(1536),
category text,
price numeric
);
-- 相似性搜索
SELECT id, category, price, embedding <->'[0.1, 0.2, ...]'AS distance
FROM items
ORDERBY embedding <->'[0.1, 0.2, ...]'
LIMIT 5;
2.结构化过滤 + 向量搜索
-- 在特定类别中搜索相似向量
SELECT id, category, price, embedding <-> '[0.1, 0.2, ...]' AS distance
FROM items
WHERE category = 'electronics'
AND price < 1000
ORDER BY embedding <-> '[0.1, 0.2, ...]'
LIMIT 10;
3.向量搜索 + JOIN 操作
-- 与用户偏好表 JOIN
SELECT i.id, i.name, i.price,
i.embedding <-> u.preference_vector AS distance
FROM items i
JOIN user_preferences u ON u.user_id = 123
WHERE i.category = u.favorite_category
ORDER BY i.embedding <-> u.preference_vector
LIMIT 20;
向量类型
pgvector 提供多种向量类型支持: 单精度向量、半精度向量、二进制向量和稀疏向量。
向量类型性能特点
从性能角度来看,pgvector 的四种向量类型呈现出不同的特性权衡。
对存储空间效率,二进制向量表现最优,其次是稀疏向量、半精度向量,标准向量占用空间最大;
对计算速度,二进制向极速计算是毋庸置疑的,其次是半精度向量和标准向量,稀疏向量相对较慢;
对精度表现,标准向量和稀疏向量精度最高,半精度向量会损失一定精度,二进制向量精度较低。
这种丰富的向量类型为不同应用场景提供了灵活的选择空间,开发者可以根据存储成本、计算性能和精度要求的优先级,选择最适合的向量类型来平衡系统资源与业务需求。
距离算法
选择合适的距离算法对于系统性能和准确性至关重要,pgvector 提供的距离算法也是很丰富的,能够满足不同应用场景的需求。
1.距离算法对比
2.距离算法应用场景选择
3.距离算法性能特点
索引类型
pgvector提供HNSW和IVFFlat向量索引支持。
1.索引基本信息
2.索引AI场景应用
3.索引构建
4.索引构建内存优化
•内存配置
***--*** 增加维护工作内存(支持并行构建)
SET maintenance_work_mem = '2GB'; -- 默认通常为 64MB
-- 临时增加工作内存
SET work_mem = '1GB';
-- 检查当前配置
SHOW maintenance_work_mem;
SHOW work_mem;
•并行配置
-- 启用并行构建
SET max_parallel_maintenance_workers = 4; -- 默认通常为 2
-- 设置并行度
SET max_parallel_workers_per_gather = 4;pgvector限制点
也正因为构建于PostgreSQL之上,pgvector也存在一些限制点。
“瑕不掩瑜“的pgvector
虽然存在这些限制,但 pgvector 也有其独特优势:
ACID 兼容性:完全支持 PostgreSQL 事务特性
SQL 集成:可以直接在 SQL 中进行向量操作和 业务集成JOIN
生态系统: PostgreSQL 的成熟生态加持
部署简单: 作为扩展安装,无需额外服务
成本效益:对于中小规模应用,成本明显优势
对于向量数据库这种新型基础设施,架构方案各不相同,行业标准不统一的情况下,只能根据需求场景平衡选择适合的方案,pgvector虽不是专业库,也不失为一种选择。