首页
学习
活动
专区
圈层
工具
发布

细说pgvector:为什么一个扩展就能让 Postgres 变身 AI 时代的核心基建

关注【云引】——云原生、数据治理、人工智能应用技术宅灵感补给池,每天 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虽不是专业库,也不失为一种选择。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/ORHXbygI8KX7wSHyB7OiJKPQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券