比 pgvector 快 20 倍的 Postgres 向量运算插件:pg_embedding

pgvector 向量索引源码解读 下面就来解读一下pgvector-0.6.0的代码,代码来自简单说一下PG extension的知识,一般来说一个编译好的extension包括control文件、一个sql文件,一个so文件,在PG命令行输入create extension xxx 时,数据会找相应的control文件,加载so文件,然后执行sql文件,可能细节上这一描述有点误差,但这是我理解pgvector插件的一个最简单的模型,而且是有效的,这里我不想深究extension的机制。 阅读详情

本文翻译自 Neon 博客 20x faster than pgvector: introducing pg_embedding extension for vector search in Postgres and LangChain,作者 Raouf Chebri。

Neon 前不久发布了适用于 Postgres 和 LangChain 的 pg_embedding 扩展,相比于 pgvector,它将 Postgres 中基于图形的近似最近邻搜索速度提升了 20 倍,准确度达到了 99%。

file

虽然使用 IVFFlat 索引的 pgvector 扩展一直是一个受欢迎的选择,Neon 新推出的 pg_embedding 扩展使用 Hierarchical Navigable Small Worlds (HNSW) 索引,在高维相似性搜索中提供了更高的效率。

你可以轻松在应用程序中集成 pg_embedding 实现向量搜索,对向量索引有先验知识不是一定的。运行以下命令开始使用:

CREATE EXTENSION IF NOT EXISTS embedding;
CREATE INDEX ON items USING hnsw (embedding) WITH (maxelements = 1000000, dims=1536, m=32);

你还可以用 LangChain 中的扩展 PGEmbedding 向量存储:

from langchain.vectorstores import PGEmbedding
db = PGEmbedding.from_documents(
    embedding=embeddings,
    documents=docs,
    collection_name="state_of_the_union",
    connection_string=CONNECTION_STRING,
)
db.create_hnsw_index(max_elements= 10000, dims = 1536, m = 8, ef_construction = 16, ef_search = 16)

如果你对 IVFFlat 和 HNSW 在基于 Postgres 应用中的内部工作原理和差异感兴趣,我们在 Neon Postgres 上进行了基准测试,以比较他们的性能,请继续阅读!

基准测试结果

基准测试使用 GIST-960 Euclidean 数据集,比较了使用 pg_embedding 的 HNSW 以及使用 pgvector 的 IVFFlat 索引的性能。该数据集提供了一个包含 100 万个 960 维向量的训练集,以及一个包含 1000 个向量的测试集。每次搜索返回 k=100 个向量。

为了提高效率,HNSW 索引存储在内存中。为了进行可比较的测试,我们使用 pg_prewarm 扩展将 IVFFlat 索引也存储在内存中:

SELECT pg_prewarm('3448836', mode => 'buffer');

下图采用对数刻度。pg_embedding 在相同的召回内执行速度快 5-30 倍。如果想要达到更高的准确性,IVFFlat 的执行时间会更长。这是因为在 pgvector 和 IVFFlat 中需要更多探测来实现更大的召回。然而,探测数量越大,搜索就越快地收敛到顺序扫描。

file

结果和分析

指标

我们根据以下指标比较了两个扩展的性能:

  • 执行时间:以执行 100个 最近邻搜索查询所需的平均时间来衡量。
  • 准确率/召回率:以每个查询返回的真实最近邻的比例来衡量。

设置

  • 数据集:我们使用 GIST-960 Euclidean 数据集进行基准测试。该数据集被广泛用于基准测试相似性搜索算法。
  • 环境:基准测试在一个具有 4 个虚拟处理器 和16GB RAM 的 Neon 实例上进行。
  • 配置:
    • 对于 pgvector,我们在 [1, 2, 10, 50] 范围内变化 probes 参数,并在 [1000, 2000] 范围内变化 lists 参数。
    • 对于 HNSW,我们用了 m 为 [32, 64, 128],efConstruction 为 [64, 128, 256],efSearch 为 [32, 64, 128 ,256 ,512]。

为什么 HNSW 比 IVFFlat 快?

我们先了解一下 IVFFlat 和 HNSW 是什么以及它们的原理。

使用 pgvector 的 IVFFlat

用 pgvector 可以在数据库中直接进行向量搜索。其中一种索引技术叫做 IVFFlat。IVFFlat 索引将数据集分成多个簇,并为每个簇维护一个倒排列表。在搜索过程中,只有选定数量的簇被检查,与平坦索引相比,这大大加快了搜索过程。

file

默认情况下,IVFFlat 探测 = 1,这意味着索引将在最近的簇质心(或列表)中进行搜索。然而,由于查询向量更接近簇的边缘,这可能导致不准确性。

提高准确性的一种方法是增加探测次数。最佳列表和探测次数分别为 sqrt(rows) 和 sqrt(lists),从而得到时间复杂度为 O(sqrt(rows))。下图显示随着探测次数增加,召回呈指数增长。

HNSW 和 pg_embedding 组合

HNSW(Hierarchical Navigable Small World)最初由 Yu A Malkov 和 Dmitry A Yashunin 在他们的论文中引入,题为:Efficient and Robust Approximate Nearest Neighbor Search Using Hierarchical Navigable Small World Graphs。

HNSW 是一种基于图的高维数据索引方法。它构建了一个图层次结构,其中每个层次都是前一个层次的子集,从而导致时间复杂度为 O(log(rows))。在搜索过程中,它通过这些图进行导航以快速找到最近邻居。

file

HNSW 算法中有三个主要参数:

  • m: 该参数表示在构建图形过程中,每个新元素创建的双向链接的最大数量。
  • efConstruction: 该参数用于索引构建阶段。较高的 efConstruction 值会创造更高质量的图和更准确的搜索结果。然而,这也意味着索引构建需要更长时间。下图表显示了使用 GIST-960 Euclidean 数据集时根据 ef_construction 值的构建时间。

file

  • efSearch: 此参数用于搜索阶段。与 efConstruction 类似,较大的 efSearch 值会在增加搜索时间的代价下提供更准确的搜索结果。该值应等于或大于 k(你想要返回的最近邻居数量)。

默认情况下,efConstruction 和 efSearch 均为 32,但可以在创建 HNSW 索引时修改它们的值:

CREATE INDEX ON vectors_hnsw USING hnsw (vec) WITH (maxelements = 1000000, dims=1536, m=32, efconstruction=32, efsearch=32);

你该选哪个索引?

我们根据以下五个指标比较了这两个索引:

  • 搜索速度
  • 准确性
  • 内存使用量
  • 索引构建速度
  • 距离度量

file

file

在 pg_embedding 和 pgvector 之间的选择取决于你的具体用例和需求:

  • 内存限制 (pgvector):如果你在严格的内存限制下工作,可以选择 IVFFlat,因为它通常比 HNSW 消耗内存更少,代价是搜索速度和准确性。
  • 搜索速度 (pg_embedding):如果你主要关注快速检索最近邻的速度,特别是在高维空间中,由于其基于图形的方法,pg_embedding 很可能是更好的选择。
  • 准确性和召回 (pg_embedding):如果对你的应用程序来说实现高准确性和召回至关重要,则 pg_embedding 可能是更好的选择。与 IVFFlat 相比,HNSW 基于图形的方法通常产生更高水平的召回。
  • 距离度量 (pgvector):无论是 pgvector 还是 pg_embedding 都支持 L2 距离度量。此外,pgvector 还支持内积和余弦距离。

结论

借助 Postgres 的 pg_embedding 扩展,你现在可以在 Postgres 中高效处理高维向量相似性搜索。HNSW 算法基于图形结构,相比 IVFFlat 索引,在搜索速度、准确性和设置方面具有多个优势。

使用 pgvector 的 IVFFlat 索引在内存限制严格的应用中仍然是一个可行的选择,但会牺牲召回率。

当然,选择 pg_embedding 还是 pgvector + IVFFlat 组合取决于你的具体需求。可以都尝试一下,找到最适合你的。Neon 也期待看到你使用 pg_embedding 开发出的创新应用和反馈!


💡 你可以访问官网,免费注册云账号,立即体验 Bytebase。

pgvector 源码分析 pgvector 库是一种用于计算向量距离的库,它的核心是提供了聚类索引,棸类索引使用的算法是 kmeans++(相对于 kmeans 最主要的区别是初始化起点的位置)。 阅读详情

相关推荐

pgvector:PostgreSQL 原生向量检索实战指南

向量检索是支撑语义搜索、AI推荐与智能问答的核心能力,其本质是通过嵌入向量的相似度计算实现高维空间中的近似最近邻查找。原理上依赖余弦相似度、欧氏距离等度量,并结合IVFFlat或HNSW等索引结构平衡精度与性能。技术价值在于避免多系统协同带来的延迟、一致性与运维负担,显著降低AI应用落地门槛。典型应用场景包括电商对话匹配、内容语义推荐、知识库问答等需融合语义理解与结构化数据的业务。本文聚焦pgvector——PostgreSQL原生向量扩展,详解其零改造集成、VECTOR数据类型、ACID保障下的向量查询及

weixin_34198762的博客 444

PG 向量化引擎--2

PG 向量化引擎--2向量化引擎是OLAP数据库提升性能的有效技术。翻到PostgreSQL邮件列表有对向量化引擎的讨论。这里继续进行整理,以作分析。关于设计中的几个问题1、在vtype中...

帅的数说 943

PostgreSQL原生向量搜索:pgvector实战指南与性能调优

向量搜索是支撑RAG、语义推荐、智能客服等AI应用的核心能力,其本质是将非结构化语义信息转化为可计算的高维向量,并基于余弦相似度、L2距离等数学原理实现高效近似最近邻检索。技术价值在于打破结构化与非结构化数据的壁垒,实现低延迟、强一致、免运维的混合查询。典型应用场景包括PostgreSQL中直接增强商品搜索、用户评论情感聚类、文档语义召回等。pgvector作为深度嵌入PostgreSQL的开源扩展,让向量能力成为数据库一等公民,无需双写、不新增组件,真正实现‘用SQL做语义搜索’。

weixin_34168880的博客 533

在 PostgreSQL 里如何实现数据的缓存更新策略的动态调整?

如果以上两种方法都不能满足我们的需求,我们还可以考虑自定义缓存更新策略。在 PostgreSQL 中,我们可以通过编写自定义函数和存储过程来实现自己的缓存更新策略。例如,我们可以编写一个函数来根据数据的访问频率和更新时间,计算数据的热度值,并根据热度值来决定是否将数据加载到缓存中或从缓存中替换出去。这种方法需要我们对 PostgreSQL 的内部机制有深入的了解,并且需要一定的编程能力,但可以实现非常灵活和精细的数据缓存更新策略的动态调整。五、具体示例。

发现生活,分享智慧,一起成长! 824

PostgreSQL向量搜索实战:用pgvector构建语义检索系统

向量搜索是现代AI应用的核心能力,本质是将文本、图像等非结构化数据映射为高维空间中的数学向量,通过余弦相似度等度量实现语义匹配。其技术价值在于突破关键词匹配局限,支撑RAG、智能推荐、语义去重等场景。PostgreSQL凭借ACID事务、SQL表达力与成熟运维体系,成为向量检索落地的理想底座;pgvector作为原生扩展,无需更换数据库即可启用向量索引与相似度计算,显著降低架构复杂度与数据一致性风险。本文聚焦pgvector在真实业务中的部署、调优与排障,覆盖HNSW索引选型、向量归一化、混合查询优化等关键

cucanqi9387的博客 476

PostgreSQL原生向量搜索:pgvector零迁移实战指南

向量搜索是AI应用的核心能力之一,其本质是在高维空间中进行近似最近邻(ANN)检索。传统方案依赖独立向量数据库,但引入数据双写、权限割裂与运维复杂度等工程风险。pgvector作为PostgreSQL官方扩展,通过原生数据类型、SIMD优化的距离运算符和标准索引访问方法(IVFFLAT/HNSW),将向量能力无缝嵌入现有关系型基础设施。它不改变事务模型、不新增服务组件、不破坏备份与监控体系,真正实现SQL级语义检索与业务逻辑的深度耦合。适用于已有成熟PostgreSQL生态、强调数据一致性与合规审计的中大型

weixin_34302561的博客 355

pgvector 5 分钟上手:给 Postgres 加上向量相似性搜索

pgvector 是把向量相似性搜索带进 Postgres 的开源扩展,一条 SQL 就能找到和你数据最像的那批数据。 ## 它是什么,为什么值得装 - **定位**:它是一个 PostgreSQL 扩展(通俗说就是给数据库装的新能力插件),让 Postgres 从只管关系表,变成也能搜向量。你的 embedding 和业务表住在同一个库,不用再单独部署一套向量数据库来回同步数据。 - **核

gitblog_00567的博客 799

Spring AI与PGVector集成实战:向量数据库在Java生态中的应用

向量数据库作为处理非结构化数据的核心技术,通过将文本、图像等数据转换为高维向量实现语义搜索。PGVector作为PostgreSQL的向量扩展插件,兼具关系型数据库的事务能力和向量检索性能,支持IVFFlat、HNSW等索引算法。Spring AI框架通过标准化VectorStore接口,为Java开发者提供了统一的向量数据库接入方案。这种技术组合特别适合电商推荐、知识库检索等需要同时处理结构化数据和向量搜索的场景。在实际工程实践中,PGVector与Spring AI的集成能显著简化系统架构,其中向量索引

weixin_34116110的博客 377

向量数据库PGVector实操

这不是 PGVector 的“能力缺失”,而是。

XiaoCai 1852

pgvector:Postgres 的开源向量相似度搜索

向量 Postgres 的开源向量相似度搜索 CREATE TABLE table (column vector( 3 )); CREATE INDEX ON table USING ivfflat (column); SELECT * FROM table ORDER BY column < - > ' [1,2,3] ' LIMIT 5 ; 支持 L2 距离、内积和余弦距离 安装 编译安装扩展(支持 Postgres 9.6+) git clone --branch v0.1.7 https://github.com/ankane/pgvector.git cd pgvector make make install # may need sudo 然后将其加载到要使用它的数据库中 CREATE EXTENSION vector; 您还可以使用 、 或安装它 入门 创建一个 3

无线网卡选购指南:哪些型号支持Kali Linux的监听模式?附免驱动网卡推荐

本文详细解析了如何在Kali Linux下选购支持监听模式的无线网卡。核心在于选择兼容的芯片组,如Atheros AR9271和Ralink RT3070等经典型号,并提供了免驱动网卡推荐与实战配置指南,帮助安全研究人员和爱好者快速搭建无线测试环境。

wind6的博客 1564

PostgreSQL 向量扩展插件pgvector安装和使用

重新修改.bash_profile,配置PG_CONFIG和LD_LIBRARY_PATH,指定安装的postgresql 16.3版本。make编译调用的postgresql不是之前安装的 16.3,而是apt-get 安装的10.23版本。利用pgvector 前提是事先安装好postgresql,安装postgresql例可参考下文。make编译pgvector时无法识别安装的postgresql。安装的版本不是最新的版本而是10.23。pgvector的安装成功。

2509_93871574的博客 966

VisualStudio2022配置CGAL

vs2022和vs2017安装配置boost没什么区别,只需要注意boost的msvc得是14.3的,这玩意跟visualstudio版本挂钩的。压缩包解压,得到下面这两文件,然后把auxiliary这个文件挪到CGAL-5.6里面就行了。我用cgal读取一个stl模型,并输出相关信息(想可视化的话需要安装Qt,不想装Qt也可以装VTK)然后下载下面这两个压缩包。照着下面的截图填就完事了。

weixin_43850909的博客 1171

为什么拉不到 pgvector Docker 镜像?向量搜索镜像标签完整指南

pgvector 是 PostgreSQL 的向量相似度搜索扩展。如果你顺手执行 `docker pull pgvector/pgvector`,会收到这样的报错: ```text Error response from daemon: manifest for pgvector/pgvector:latest not found ``` 别慌,这不是你的错,也不是网络问题。这个镜像压根就没有

gitblog_00149的博客 839

多周期路径及set_multicycle_path详解

默认情况下,每条路径都被定义为单周期,即源触发器在时钟的任一边沿启动(launch)的数据都应该由目的触发器在时钟的下一上升沿捕获(capture)。 有的设计需要在数据被捕获前提供一些额外的周期,这类路径被称为多周期路径。 一、set_multicycle_path命令 命令格式如下: set_multicycle_path .........

Jackiezhang1993的博客 4万+

手把手教你用STM32+LAN8720搭建以太网通信模块(含原理图)

本文详细介绍了如何使用STM32微控制器与LAN8720物理层芯片搭建以太网通信模块,涵盖硬件设计、软件配置及常见问题排查。重点讲解了LAN8720的低功耗设计、RMII接口简化布线等特性,以及STM32CubeMX配置和LwIP协议栈移植技巧,助力开发者快速实现稳定可靠的嵌入式网络通信。

CAT789的专栏 416

5步快速部署pgvector:PostgreSQL向量搜索扩展终极指南

你是否正在寻找一个简单高效的向量数据库扩展,让你的PostgreSQL具备AI时代必备的向量搜索能力?pgvector正是你需要的PostgreSQL插件!这个开源向量数据库扩展让PostgreSQL从传统的关系型数据库华丽转身,成为支持向量相似性搜索的强大工具。 想象一下,你的应用程序需要处理海量文本、图像或音频的嵌入向量,传统的关键词搜索已经无法满足精准匹配的需求。pgvector向量数据库

gitblog_00130的博客 908

基于 YOLOv26 的食品包装缺陷检测系统:智能视觉质检方案

本文提出了一种基于YOLOv26深度学习的食品包装缺陷智能检测系统。该系统能够自动识别多种常见包装缺陷,包括密封不良、破损、污染、标签错误等8类问题。相比传统人工检测方法,该系统具有高精度、多类别分类、实时推理等优势。文章详细介绍了系统架构,包含数据采集、预处理、YOLOv26检测模型和后处理四个核心模块,并提供了完整的环境配置和数据处理代码实现。该系统为食品包装行业提供了一种高效、准确的智能视觉质检解决方案。

一键难忘的博客 690

深度解析pgvector向量搜索插件的跨平台编译技术实现

在AI应用和向量数据库领域,pgvector作为PostgreSQL生态系统中的向量相似性搜索扩展,凭借其高性能和ACID兼容特性,已成为向量搜索解决方案的重要选择。本文将从技术架构角度深入剖析pgvector的Windows编译实现,为开发者提供从源码编译到性能优化的完整技术路径。 ## 🔍 问题场景:Windows环境下的编译挑战 在Windows平台编译PostgreSQL扩展面临多重

gitblog_00294的博客 438

Mamba SSM 实战:IMDb 文本分类 + Mamba-ssm 全流程

Mamba SSM 文本分类链路:IMDb 二分类 → MambaLMHeadModel (d_model=256, n_layer=8, d_state=16, exp2=2) → 末 token 分类头。5 epoch 达 89.2% 准确率 (与 BERT-base 持平), 但显存降低 44% (3.5GB vs 6.2GB)。建议序列长度 ≥ 1024 再选 Mamba, 短序列 (< 512) 用 BERT 更高效。扩展时注意d_state。

m0_71589036的博客 58

基于Multisim的三相桥式全控整流电路建模、仿真与综合分析

本文基于Multisim 14.2平台,系统研究了三相桥式全控整流电路的建模与仿真方法。首先阐述了电路拓扑结构和工作原理,建立了数学模型。重点介绍了在Multisim中搭建主电路、设计六脉冲触发系统(含两种实现方案)的关键步骤,以及参数设置技巧。通过仿真分析了不同负载(阻性、阻感性)和触发角(0°-90°)下的输出特性,包括电压波形、电流谐波等性能指标。研究为电力电子教学提供了直观的仿真范例,并探讨了模型改进方向与实际工程应用价值。

huanghm88的专栏 354

PostgreSQL向量搜索实战:pgvector部署调优与语义检索集成

向量搜索是AI应用中实现语义检索的核心能力,其本质是在高维空间中计算相似度并高效召回。技术原理上依赖距离度量(如余弦距离、欧氏距离)与近似最近邻索引(如HNSW、IVFFlat),以平衡精度与性能。pgvector作为PostgreSQL原生向量扩展,将该能力无缝嵌入成熟关系数据库,避免多系统协同的运维复杂度与数据一致性风险。它支持SQL原生查询、ACID事务、统一权限与监控,显著降低LLM应用集成门槛。本文聚焦生产级落地,涵盖pgvector安装适配、向量表设计、索引参数调优(lists/probes/m

weixin_30307921的博客 567

B3640 T3 句子反转

要求将这些单词倒序输出。而且对于每个单词,如果是小写词,应当转为大写;如果是大写词,应当转为小写;如果是自然数,应该倒转输出。给定一行句子,每个词之间用空格隔开,要么是全小写英文单词,要么是全大写英文单词,要么是自然数。第一次做的时候0分,两个小时没做出来。仅一行,表示程序对句子的处理结果。仅一行,即需要反转的句子。

小前日记 366

ChatGPT Retrieval Plugin 接入 Postgres + pgvector:环境配置、迁移与索引优化实战指南

本文是 ChatGPT Retrieval Plugin 官方文档中 [docs/providers/postgres/setup.md](https://link.gitcode.com/i/08ee8b3d4e048925d740d9d6560cbb23) 的深度展开,完整讲解如何为该项目配置 PostgreSQL + pgvector 向量数据库:从环境变量清单、Docker 本地起库、迁移

gitblog_00251的博客 179

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Postgres 凭什么取代 MySQL 成最受欢迎的数据库?

你好,我是 EarlGrey,喜欢翻译点东西,偶尔写写代码。点击下方卡片关注我,一起向上进击,提升自我。后台回复关键词“电子书”,送你一份我收藏的电子书合集。本文来自 Star History 网站的 10 月精选,经 EarlGrey@进击的Grey 翻译后与大家分享。 原文链接为:https://star-history.com/blog/ai-for-postgres在2023年Stack...

codingpy的博客 1072

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Star History 十月开源精选 |AI for Postgres

今年我们见证了科技界拥抱人工智能,并在 AI 领域里找到自己的立足之地。幸好 Postgres 足够开放,支持扩展,我们有幸得以享用想这些扩展,可以为我们的 Postgres 添加 AI 功能,而无需迁移到新的数据库。💡 更多资讯,请关注 Bytebase 公号:Bytebase。

Bytebase的博客 749

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: Star History 月度开源精选|2023 年 6 月
下一篇: MySQL Schema 比较同步工具汇总(2023 版)
Bytebase
博客等级 码龄5年 1349粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值