当前位置: 首页 > news >正文

PostgreSQL 上的向量搜索实践

本文整理自 IvorySQL 2025 生态大会暨 PostgreSQL 高峰论坛的演讲分享,演讲嘉宾:高策,TensorChord CEO。

引言

本文主要分享如何在 PostgreSQL 上进行向量的搜索。

PostgreSQL 有非常多的 Extension,我们可以通过 Extension 的方式去扩展 PostgreSQL 能够支持的数据类型。这是 PostgreSQL 在全球流行的一个重要原因。

我们可以把向量理解为一个新的数据类型。PGVector 是目前非常流行的项目,支持在 PostgreSQL 中做向量搜索。但 PGVector 同样也存在很多问题。

为了解决社区里的一些问题,我们做了 VectorChord 这个基于 PostgreSQL 的向量搜索引擎,其前身是 pgvecto.rs。

背景

90% 的数据在过去的两年被生产

图片1.png

在数字化与智能化的浪潮下,全球数据正以前所未有的速度增长。

根据统计显示,全球 90% 的数据是在 2024 年和 2025 年两年间产生的,而 2023 年之前仅占 10%。

  • 早期的数据主要由人类活动产生,增速相对平缓;
  • 近两年随着生成式 AI 的广泛应用,数据曲线出现了陡峭的上升拐点。
  • 未来几年,AI 生成数据将逐渐成为主流,占比持续攀升。

这一趋势不仅意味着数据量级的飞跃,也带来了数据利用方式的转变。传统的结构化数据已无法满足智能应用的需求,而大规模、多模态、语义化的数据将成为驱动 AI 应用和向量搜索的核心动力。

只有很少部分的数据被 LLM 使用

尽管 LLM(Large Language Model)正在快速发展,但目前真正被广泛利用的数据类型仍然十分有限,主要集中在文档和图像这类相对简单的模态。相比之下,更多高价值的数据类型,例如结构化业务数据、非结构化日志数据、甚至涉及隐私的敏感数据,尚未被有效挖掘。

事实上,像信用卡交易、游戏交互等数据都蕴含着巨大的潜在价值。如果要让 AI 真正理解并使用这些信息,必须先经过一个关键步骤:将原始数据转化为 Embedding(向量)表示,再通过向量搜索在海量数据中进行高效召回。这种转化不仅是 LLM 应用的前提,更是未来数据智能发展的必然趋势。随着数据规模和模态的不断扩展,对向量搜索的需求只会越来越迫切。

图片2.png

Agent 等新场景进一步扩展对向量搜索的需求

随着大模型应用的扩展,Agent 正逐渐成为热门探索方向。在这一类场景中,Agent 需要具备类似人类的记忆与学习能力,既要能够保留短期记忆,也要积累长期记忆。

在实现过程中,向量搜索发挥了核心作用:

  • 通过将交互存储在矢量数据库中,实现了上下文保留和自适应学习,从而使人工智能代理能够回忆过去的经验并随着时间的推移改进。
  • 矢量数据库处理文本、图像和音频的语义搜索,以实现长期记忆。

图片3.png

向量搜索

什么是向量搜索

向量搜索的核心,是将文本、图像或音频等信息转化为向量化的数字表示,并在高维空间中通过计算“距离”来衡量相似度。

例如,当一句文本被模型转化为向量后,它可以被表示为一个点,落在三维或更高维的坐标空间中。类似语义的词语(如 student 和 school)会自然地分布在相互接近的位置,当输入一个新词(如 elementary),就可以通过计算向量间的距离,快速找到与之语义相似的词语。

图片4.png

在实际应用中,向量搜索通常包括以下流程:

  1. 数据向量化:无论是文本还是查询请求,都会经过 Embedding Model 转化 Vector Embedding。
  2. 向量存储:业务相关的数据(如企业 HR 文档)被批量转化为向量,并存储在数据库中。
  3. 语义匹配与召回:当用户提出问题(如“公司年假有多少”),系统会将其转化为向量,并与数据库中的向量比对,快速找到语义最接近的答案。
  4. 结果生成:检索结果交由 LLM 进行加工,最终输出完整、自然的回答。

图片5.png

独立的向量数据库存在一致性的问题

在数据管理领域,独立的向量数据库正面临一致性挑战。许多企业已在 Postgres 中存储了核心数据,但为了支持向量搜索功能,往往需要额外维护一个独立的向量数据库。这意味着需要在两个数据库之间进行频繁的数据同步,以确保数据一致性。然而,这一过程引入了额外的复杂性,增加了维护成本和出错风险。

如果能在 Postgres 中直接实现向量搜索功能,这种一致性问题将迎刃而解,不仅能简化数据管理,还能提升系统的可维护性和应用性,为企业带来更高的效率和稳定性。

图片6.png

现有方案 pgvector 的问题

图片7.png

尽管 Postgres 中的 PGVector 是一个广受欢迎的向量搜索解决方案,但其在处理高维向量时存在显著局限性。

图片8.png

  • 当前支持的最大向量维度为 2000(受限于 8kb 页面限制)但用户需要更高维度的向量支持以实现更好的召回效果。
  • 各主流嵌入模型维度对比:
    • OpenAl 嵌入:3072 维
    • NV 嵌入:4096 维
    • MTEB 榜单 Top10 的嵌入模型全部超过 2000 维
    • 仅 1 个 Top20 模型(兼容 pgvector)低于 2000 维

VectorChord

VectorChord 是基于 PostgreSQL 的向量解决方案,可解决数据一致性问题,且具备 PGVector 不具备的优势。

图片9.png

在技术指标上方面,VectorChord 与其他产品在相同检索精度下,其每秒请求数更优,高并发检索时响应更稳定。

图片10.png

在插入性能方面,向量数据插入需重建索引,VectorChord 插入性能达 1500 操作 / 秒,显著优于 Timescale 出品的 PGVectorScale 与原生 PGVector,能满足实时推荐等需持续写入场景的需求。

图片11.png

图片12.png

幕后技术:RabitQ + IVF + FastScan + Better Storage Layout

VectorChord 的高性能,由 RabitQ、IVF、FastScan、Better Storage Layout 四大技术协同支撑,该技术源自 2024 年 SIGCOMM 顶会论文,从算法到工程解决向量搜索的精度、性能与存储适配问题。

算法选型上,团队未用主流 HNSW(因图随机游走导致随机读写多,不适配磁盘),而是选 IVF——虽传统精度不足,但天生适配磁盘。同时叠加 FastScan(利用存储特性提高扫描效率)与 Better Storage Layout(减少数据访问耗时),补 IVF 短板。

其中 RabitQ 量化算法是最核心的一部分,解决了传统量化 “降精度” 痛点——传统量化压缩向量(如 bit 存维度)会丢精度,需扩大候选集补,而 RabitQ 靠数学证明控精度损失上下界,无需扩候选集。

图片13.png

Case Study

  1. Earth Index
  • 该团队将地球划分为超过 32 亿个重叠的 10 公顷单元(每个单元约相当于中央公园面积的 3%),并运用前沿 AI 基础模型,将其编码为可搜索的地理空间数据库。
  • GCP’s vector search would cost$237K/month(!)
  1. Immich
  • 挑战:
    • 专用向量数据库和 SOL 数据库始终未能完美同步
    • 带过滤条件的查询难以优化,性能往往达不到预期
  • VectorChord 的优势:
    • 更快的索引(支持更高质量参数)、更快的插入速度和更准确的结果
    • 支持无缝的带过滤搜索,并提供无限滚动功能

欢迎关注我们的开源项目:

  • github.com/tensorchord/vectorchord
  • gitHub.com/tensorchord/vectorchord-bm25

相关文章:

PostgreSQL 上的向量搜索实践

本文整理自 IvorySQL 2025 生态大会暨 PostgreSQL 高峰论坛的演讲分享,演讲嘉宾:高策,TensorChord CEO。引言 本文主要分享如何在 PostgreSQL 上进行向量的搜索。 PostgreSQL 有非常多的 Extension,我们可以通过 Extension 的方式去扩展 PostgreSQL 能够支持的数据类型。这…...

【数据结构——图与邻接矩阵】 - 实践

【数据结构——图与邻接矩阵】 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important…...

(读书笔记)平衡掌控者

这本书比较短,主要是国内某数值设计师的MMORpg的设计经验。 虽然大部分是mmo制作的细节,可以不用太深挖,但还是有不少“游戏共性”可以参考和学习的。 主要是第2章和第4章的内容。 下面记录一些关键点并做了一些拓展。 ---------------------------------------------------…...

带头结点的单链表删除指定位置结点

1. 功能概述 bool ListDelete(LinkList &L, int i, ElemType &e) 函数的功能是:在带头结点的单链表 L 中,删除第 i 个位置的结点,并将被删除结点的数据通过引用参数 e 带回给调用者。函数名: ListDelete,清晰表达了其功能。 返回值: bool 类型。true 表示删除成功,…...

《文字、语言与数字的奇妙联结》读后感,大公司内部编码规范,本学期编码遵守规范

《文字、语言与数字的奇妙联结》读后感 读到 “文字和语言与数学,从产生起原本就有相通性,虽一度分道扬镳,最终仍能走到一起” 时,我被这种跨领域的深层联结深深触动。 最初,文字、语言与数学或许本是 “同根生”—— 它们都发源于人类认知世界、传递经验的需求。远古时期…...

[HTTP/Spring] RestTemplate : Spring的HTTP网络请求框架

0 序java应用开发中,使用http连接,访问第三方HTTP接口,通常使用的HTTP连接请求工具为HttpClient和OKHttp。这两种HTTP连接请求工具,使用起来比较复杂,新手容易出问题。如果使用spring框架,可以使用restTemplate来进行http连接请求。restTemplate默认的连接方式是java中的…...

深入解析:Linux使用-MySQL的使用

深入解析:Linux使用-MySQL的使用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; fo…...

博客园-我的博客-的皮肤更换

皮肤地址 GShang写的博客皮肤 最近用的这个博主写的 cnbook ,强力安利!...

Apache Commons Math3 使用指南:强大的Java数学库 - 教程

Apache Commons Math3 使用指南:强大的Java数学库 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", m…...

HarmonyOS图形处理:Canvas绘制与动画开发实战

本文将全面介绍HarmonyOS 5中Canvas组件的使用方法和动画开发技巧,通过详细的代码示例和最佳实践,帮助您掌握图形绘制和动态效果实现的核心技能。1. Canvas组件基础与核心API Canvas是HarmonyOS中用于2D图形绘制的重要组件,提供了丰富的绘图接口和灵活的动画支持。 1.1 Canv…...

应用的微服务化-容器化-CI/CD

第一阶段:需要对应用按照云原生架构进行应用的微服务化改造,容器化改造,以及对接CI/CD平台,使得应用具备云原生的特点 <1.> 微服务注册配置中心 业务系统在进行微服务化改造的过程中,会涉及微服务的注册,以便于被其他所依赖的上游服务发现,分别是Naco,Eureka和Zo…...

[转发和重定向] 的核心定义

重定向和转发 不废话: “转发” 的核心定义: 服务端内部主导跳转、客户端无感知(仅 1 次请求)、浏览器 URL 不改变,与传统 Web 开发中 “转发” 的本质逻辑完全一致,只是实现载体(Nginx 路由层 vs 上层业务框架)不同,不影响其 “转发” 的属性归属。 “重定向”核心定…...

script setup 在 Vue 3 中的核心作用及具体实现方式

​​一、核心作用​​ 1. ​​简化 Composition API 语法​​​​自动暴露顶层变量​​:无需手动通过 return 暴露属性或方法,直接声明即可被模板使用。 <script setup> const count = ref(0); // 自动暴露给模板 </script> <template><p>{{ count }…...

0voice-1.4.1-cmake

cmake介绍...

test test test

this test string...

容器化改造基本原理

虚拟化和容器化是项目云化不可避免的两个问题。虚拟化由于是纯平台操作,一个运行于linux操作系统的项目几乎不需要做任何改造就可以支持虚拟化。而项目如果要支持容器化则需要做许多细致的改造工作。容器化相对于虚拟化的优势也相当明显,运行于裸机性能高,秒级启停容器,更不…...

Blogroll 友链

Blogroll 友链愿我如星君如月,夜夜流光相皎洁。...

Java 字节码与 ASM 框架实战解析

Java 虚拟机(JVM)以字节码(Bytecode)为基础执行所有 Java 程序。对于希望深入理解 Java 底层运行机制,或开发自定义编译器、性能探测器、动态增强框架(如代理、AOP)的开发者来说,掌握 Java 字节码结构与 ASM 等字节码操作工具极为重要。 本篇文章将深入解析 Java 字节码…...

计算机大数据毕业设计选题:基于Spark+hadoop的全球香水市场趋势分析系统 - 详解

计算机大数据毕业设计选题:基于Spark+hadoop的全球香水市场趋势分析系统 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…...

Dos的常用命令

常用的Dos命令 #盘符切换 #查看当前目录下的所有文件 dir #切换目录 cd change directory cd..返回上一级 #清理屏幕 cls(clear screen) #退出终端 exit #查看电脑的ip ipconfig #打开应用calc(计算器)mspaint(画图)notepad(笔记)#ping 命令 ping www.baidu.com#文件操作…...

持续集成自动化CI/CD

背景Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。持续集成(Continuous integration)是一种软件开发实践,即团队开…...

Lightroom Classic 2025(LRC 2025)安装教程(附直接安装包下载)+入门操作指南

一、LRC 2025下载及软件介绍 Lightroom Classic 2025 v14.0.1 是 Adobe 旗下专业图片后期处理软件,主打RAW 格式图片编辑,专为摄影师、摄影爱好者及数码摄影 / 图形设计从业者设计,提供从照片导入、整理到编辑、打印的全套服务。支持各类相机 RAW 文件解析,能高效完成照片调…...

2025/09/14 【二叉树11】完全二叉树的节点个数

222. 完全二叉树的节点个数 - 力扣(LeetCode)...

8888

jjjj...

接口限流代码 - 实践

接口限流代码 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14p…...

OutGuess 安装与问题排查指南(Kali Linux 环境)

OutGuess 安装与问题排查指南(Kali Linux 环境) 本文档基于实际操作流程,整理了 OutGuess 工具从下载、编译安装到常见问题解决的完整步骤,适用于 CTF 隐写术场景下的工具配置需求。 一、工具简介 OutGuess 是经典隐写术工具,主要用于在 JPEG/PPM 图像 中隐藏 / 提取数据,…...

拓展操作码举例

拓展操作码举例 指令字长16位,每个地址码占4位: 那么如果要表示三地址操作码有16条 前四位表示操作码op,后面有3个4位长的地址字段A1,A2,A3 三地址指令 至少需要将1111留作扩展操作码之用,因此三地址指令只能有2^4 -1=15条 二地址指令 至少将 1111 1111 留作扩展操作码之…...

TryHackMe | Cicada-3301 Vol:1

TryHackMe | Cicada-3301 Vol:1 一、分析音频软件 先把文件下载到本地使用unzip解压缩,得到一个音频文件和一个图片我们这边先查看一下图片里面是什么内容大致意思:你好。我们正在寻找高智商的人。为了找到他们,我们设计了一个测试。 这张图片里藏有一条信息。找到它,它会指…...

[MCP][01]简介与概念

MCP简介与概念简介 MCP(全称为Model Context Protocol,模型上下文协议)是一种面向大模型交互过程的通用上下文协议标准。其核心目标在于为模型构建一个结构化、可控、可扩展的语义执行环境,使语言模型能够在统一的上下文管理体系下进行任务调度、工具调用、资源协作与状态保…...

完整教程:Word添加图/表题注

完整教程:Word添加图/表题注pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-s…...

CF819B Mister B and PR Shifts

CF819B Mister B and PR Shifts 题目描述 Some time ago Mister B detected a strange signal from the space, which he started to study. After some transformation the signal turned out to be a permutation $ p $ of length $ n $ or its cyclic shift. For the furthe…...

第一次自我介绍

大家好,我是李嘉倩,核心兴趣是《和平精英》《第五人格》这类竞技游戏,更擅长把游戏变成 “数据收集与分析” 的实践场,这也是我的核心优势。 为提升游戏策略,我坚持1 年半做了两件事:数据收集:用 Excel 记录《和平精英》200 + 局的落地点物资刷新率、对战淘汰 / 成盒原因…...

在Linux环境部署Flask应用并启用SSL/TLS安全协议

部署Flask应用通常涉及以下几个步骤:准备应用程序、选择合适的WSGI服务器、配置Web服务器代理、申请SSL证书以及配置SSL。 准备Flask应用 首先,你需要在Linux服务器上安装必要的软件,包括:Python和pip(Python包管理器) 虚拟环境(virtualenv或conda) Flask框架和依赖库使…...

0127_责任链模式(Chain of Responsibility)

责任链模式(Chain of Responsibility) 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 UML 图优点降低耦合度:请求发送者不需要知道哪个对象处理请求 动态组合:可以…...

洛枫娜娜米讨厌数学……?

Xuan_qwq 好闪,拜谢 Xuan_qwq!插板 Catalan 数 应用一般有两种模型:折线型。 二叉树型。? CF1696E Placing Jinas 诈骗题。“最小值”纯诈骗,实际上操作次数和操作顺序没半毛钱关系。 每个点上的操作次数就是从 $(0, 0)$ 到这个点的路径条数,这是容易理解的,一条路径带来…...

Spatial 语言核心概念简介

我们来详细解析一下斯坦福大学的 Spatial 语言。这是一个非常专业且强大的领域特定语言(DSL),用于高性能硬件(如FPGA或ASIC)生成。 一、Spatial 语言核心概念简介 Spatial 是一个嵌入在 Scala 内部的 DSL(Domain-Specific Language)。它的根本目标是让软件工程师和算法专…...

Redis数据库的五类核心数据结构

Redis是一个开源的键值存储系统,支持多种类型的值模型,其中五种核心的数据结构是:String(字符串)、List(列表)、Set(集合)、Hash(哈希表)、和Sorted Set(有序集合)。下面将对每种数据结构进行详细解析。 1. String(字符串) String数据结构是最简单的数据类型,通…...

RAG 个人知识库 向量查找原理

...

css-1

css的三大特性继承性:子元素继承父元素样式主要是跟文字相关的样式继承。层叠性:后面样式会覆盖前面样式,主要解决样式冲突问题。但是要看选择器权重来确定优先级优先级:优先级由选择器的 权重 决定,权重高的规则覆盖权重低的规则css的优先级原则:1. 优先级相等的时候,CS…...

Java-JDK8新特性

Java-JDK8新特性主要讲解: 1.Java8概述 2.Lambda表达式 3.函数式接口 4.方法引用 5.Stream API 6.新时间API 1.Java8概述 略 2.Lambda表达式 https://github.com/godmaybelieve...

解决MySQL ONLY_FULL_GROUP_BY 错误的方案

在MySQL数据库中,ONLY_FULL_GROUP_BY是一个服务器SQL模式,它用于控制对 GROUP BY子句的处理。如果启用了 ONLY_FULL_GROUP_BY,任何不在 GROUP BY子句中也没有使用聚合函数的非聚合列都会导致错误。这是为了防止不确定的结果,因为当选择非聚合列而没有明确指定如何对这些列进…...

博客园美化

参考: 基本模板:博客园美化(最全) 看板猫:博客园看板猫 大部分套用的是模板,自己更改了一些尺寸、位置、透明度之类的。下面放上博客定制css。 #google_ad_c1, #google_ad_c2 {display:none;} .syntaxhighlighter a, .syntaxhighlighter div, .syntaxhighlighter code, .…...

spatial 一个芯片设计语言的简介 scala dsl 并行支持 -1

以下是对原网站内容的翻译 https://spatial-lang.readthedocs.io/en/legacy/tutorial/starting.html 以下是您提供的Spatial框架入门指南的中英对照翻译:​​0. Getting Started | 0. 开始使用​​ ​​Prerequisites | 先决条件​​ First, make sure to download and instal…...

NOIP备考

模拟赛 1 T1 https://www.luogu.com.cn/problem/T664700 前置知识是 P5019。 很典的思路。在 \(a\) 序列前后都塞 \(a_0=a_{n+1}=0\)。算长 \(n+2-1=n+1\) 的差分数组 \(c\)。易知 \(a\) 是 \(c\) 的一个前缀和数组,即 \(a_i+c_i=a_{i+1}\)。已知 \(a_0=0\),只需要差分数组都…...

NVIDIA GPGPU 访存通路设计调研

纵向结构上,传统架构仅对用户暴露 2 层存储交互,而随着 Hopper 添加 st.async ,NVIDIA GPU 完成暴露 3 层存储结构的双向通信接口,即 \(2\times C_{3}^{2}=6\) 一共 6 种指令。Src\Dst RF SMEM DRAMRF x st. Shared st. GlobalSMEM ld. Shared x st. Async (Hopper)DRAM ld…...

用 Java 和 Tesseract 实现验证码图像识别

验证码图像识别在自动化测试、信息采集、系统登录等场景中有着重要的应用价值。本文将介绍如何使用 Java 语言结合 Tesseract OCR 引擎,构建一个完整的验证码图像识别流程,包括图像预处理与识别优化。 一、环境准备 安装 Java(推荐版本 11 及以上) 安装 Tesseract OCR 引擎…...

AGC003D

题意是给定一个集合 \(S\) 要求找到它的最大的子集使得子集里的任意两个数相乘都不是完全立方数。 \(S_i\le1e10\),集合大小小于 \(1e5\)。 首先对于每个数都把它的因子的指数对 \(3\) 取模,然后可以发现操作完了的形式都只有一种形式与它相乘可以得到完全立方数的数。那就在…...

Java 实现验证码图像识别与处理流程详解

在实际开发中,自动化处理验证码图像是提升系统智能化和测试效率的一个关键点。Java 作为一门稳健的编程语言,结合 OCR 技术可以有效实现验证码识别。本文将介绍如何使用 Java 配合 Tesseract OCR 引擎完成从图像读取、预处理到文字识别的完整流程。 一、项目依赖准备 安装 Ja…...

图论杂题。

胡马渐远蹄声尽,四顾萧条暮色起。 空城角随西风吟,废池乔木,犹厌言兵。 ——《无题》luogu P6880 反转边等价于删一条再加一条边。 加边的肯定随便求。 删边,如果删在最短路上我们就暴力跑一遍;否则肯定还是最短路。两个方向最短路上 \(\mathcal{O}(n)\) 条边。用稠密图朴…...

暑假训练小结

主要做bzoj题单。 前几天相当痛苦,水平太菜题单根本做不下去。 基本都是跟着题解写代码。 还记得最开始写的是一道网络流然后学的是ek。 熬过第一个阶段之后,从杀蚂蚁那道题之后开始发现自己可以大概看懂大部分题解的思路了。 别问我为什么是杀蚂蚁,因为那段时间里这个记得最…...