Pigsty v2.3.1:HNSW 版 PGVECTOR 来了


Pigsty v2.3.1 现已发布。这个版本中PGVECTOR迎来 v0.5 史诗级更新,添加了新的 HNSW 索引支持。也对新发布的 PostgreSQL 16 RC1 提供了支持。此外,官方文档现在提供中文版本,现有文档也进行了丰富与完善。最后,还有例行的软件版本更新与问题修复。

HNSW 版 PGVECTOR?

PGVECTOR 是一个非常实用强大的 PostgreSQL 扩展插件,允许你在现有的关系型数据库 PostgreSQL 上拥有完整的向量数据存储检索能力。

9月1号,PGVECTOR 发布了一个重大版本更新 v0.5 ,引入了一种全新类型的索引:HNSW 。在 ANN Benchmark 中,召回率和性能表现上相比原有的 IVFFLAT 索引都有巨大的提升,在综合性能表现上相比专业向量数据库毫不逊色! 此外,在距离的计算性能上相比 0.4.4 有显著提升(特别是L2欧式距离)。最后是 IVFFLAT 索引的并行创建能力:可以让耗时的索引创建操作加速N倍!

向量数据库的利弊权衡

向量数据库索引算法也有一个 “不可能三角”:质量、效率、成本

质量:查询结果的召回率(正确程度)

效率:查询的响应时间

成本:查询所需的内存大小//索引构建速度

对于向量数据库的典型场景 —— 语义搜索而言。最重要的属性毫无疑问是召回率,这会直接影响终端用户的体验。性能通常来说不是大问题,够用就行:模型编码耗时通常在几十毫秒到上百毫秒,把10毫秒的查询优化到1毫秒对用户体验来说毫无意义;吞吐可以通过无限拖从库的方式解决。内存使用/构建速度通常是最不重要的 —— 对用户无感知,而且只要能跑起来,以目前的内存价格,加钱加资源能解决的问题通常不算什么问题。

经典的暴力全表搜索算法有着无可替代的最好质量,但是性能很差,所需内存资源极少(顺序扫一遍,轮流载入内存)。PGVector 原先使用的 IVFFLAT 索引有着很好的性能,但召回率表现一般,内存使用一般。而现在新增的 HNSW 索引,在召回率和性能上都有优秀的表现,最大的缺点在于索引构建速度慢/内存使用量高。

HNSW 算法几乎是专用向量数据库的标配,因为它在质量、性能上都有优异的表现。虽然有索引构建速度慢的缺陷,但它也有几个额外的好处:

  • “增量维护”:使用 HNSW索引,你可以在空表上创建索引并随时添加向量,而不会影响召回率!这与 IVFFLAT 不同:IVFFLAT在构建索引之前首先需要加载向量数据,使用 Kmeans 以找到最佳中心点,才能有最好的召回率。当你更新了许多数据时,可能需要重建索引,才能有最好的召回效果。

  • 更新和删除:pgvector 的 HNSW 实现允许更新和删除,你可以使用标准的 UPDATE / DELETE 语句。许多 HNSW 向量数据库实现都不支持这一功能!

这意味着 HNSW 索引几乎不需要什么额外的维护工作:你可以并发写入/更新,增量维护,在不影响读写请求的前提下新建索引,也不用担心数据的变化会影响索引的质量。数据是持久化的,受到PITR时间点恢复的保护,并且可以使用标准 WAL 基础设施可无缝复制到从库上。

PGVector 的 HNSW 实现性能表现优异,根据 Jonathan Katz 的测试结果,显著优于 pg_embedding (基于磁盘的实现) 的表现。各种 PostgreSQL 的向量扩展分叉恐怕要面对巨大的生存竞争压力了。

与此同时,原有的 IVFFLAT 索引也有一系列改进:你现在可以并行创建 IVFFLAT 索引了。视并发程度可以加速几倍到十几倍不等。而距离度量函数的性能也进行了优化,例如 L2 距离计算在 ARM64 下有 36% 的性能提升。

PGVECTOR 的战略卡位

实现一个向量数据类型/索引功能只需要几千行代码,而实现 PostgreSQL 这样功能完备稳定可靠的数据库需要的是百万行级的代码,复杂度根本不可同日而语。一个合格的向量数据库 首先得是一个合格的数据库,而从零开始做到这一点并不容易。错误的路线将耗费百倍力气做无用功,PGVector 选择站在巨人的肩膀上,而不是造土法轮子重新发明一个数据库,这是明智而务实的做法。

例如,你可以将向量功能与各种 PostgreSQL 提供的功能组合使用:使用表达式索引只索引一部分感兴趣的内容,实时查看索引创建进度,不阻塞读写请求在线创建/重建索引,使用多个进程并发创建索引。

当然,也可以将 Vector 模糊搜索 / 语义搜索 与 PostgreSQL 原有的全文检索/倒排索引功能组合使用,提供可解释性更佳的搜索结果。也可以继续使用标准 SQL 对元数据/各种字段进行精准的过滤,将精确搜索与模糊搜索相结合。并避免在多个专用数据组件中来回搬运数据的烦恼。

专用向量数据库本来唯一能拿的出手的亮点特色就是性能,然而 pgvector 的 HNSW 实现让这唯一的亮点都面临挑战,恐怕我们很快就会看见地理数据库、文档数据库、时序数据库、分布式数据库的历史再一次上演。

PostgreSQL 16 RC 1

PostgreSQL 16 的第一个候选发布版本 RC1 于9月1号释出!正式发布日期为 9月14日。

Pigsty 也许是最先提供 PostgreSQL 16 支持的发行版:从 16 beta1 就支持了。尽管目前仍然没有正式发布,但你已经可以拉起 PostgreSQL 16 的高可用集群。PostgreSQL 16 有一些比较实用的新功能:从库逻辑解码与逻辑复制,针对I/O的新统计视图,全连接的并行执行,更好的冻结性能,符合 SQL/JSON 标准的新函数集,以及在HBA认证中使用正则表达式。

Pigsty 特别关注 PostgreSQL 16 中的可观测性改进,新的 pg_stat_io 视图,让用户可以直接从数据库内访问到重要的 I/O 统计指标,对于性能优化,故障分析具有非常重要的意义。在以前,用户只能在数据库/BGWriter上看到有限的统计指标,想要更精细的统计数据,只能关联操作系统层面的I/O指标进行分析。现在,你可以从后端进程类型/关系类型/操作类型三个维度,对读/写/追加/回刷/Fsync/命中/逐出等行为进行深入的洞察。

另外一个非常有价值的可观测性改进点是,pg_stat_all_tables 与 pg_stat_all_indexes 会记录最后一次顺序扫描 / 索引扫描的时间。尽管这个功能在 Pigsty 的监控系统中可以通过扫描统计图表实现,但官方提供直接的支持肯定更好:用户可以直观地得出一些结论:比如某一个索引是不是没用上可以考虑移除。此外,n_tup_newpage_upd 指标可以告诉我们表上有多少行在更新时不是在页内原地更新,而是移动到了一个新的页面上,这个指标对于优化 UPDATE 性能,调整表填充因子具有重要的参考价值。

在 Pigsty v2.3.1 中,EL 8 / EL 9 的离线软件包中已经默认收录了 PostgreSQL 16 RC1 的RPM包。并将在下个 Release 中立即跟进 PostgreSQL 16 的正式版本。

中文文档

从 v2.0 开始,Pigsty 的官方文档就一直只有英文。不过从这个版本开始,中文文档又回来了!多亏了 GPT-4 提供了高质量的中英互译。原有的英文文档,也新增了许多补充内容。

此外,原有 Github Pages 托管文档的地址是 https://vonng.github.io/pigsty/ ,现在则有了一个新的专用域名 https://doc.pigsty.cc 。针对墙内用户访问不便的问题,还提供了镜像的官方站点: https://pigsty.cc ,这里的中英双语文档都也都已经更新至 v2.3.1 最新版本。

另一个变化是,Pigsty的公开Demo https://demo.pigsty 现在也使用机构签发的正规 HTTPS 证书,而不是 Pigsty 自签名的证书了。

测试环境

在以前,Pigsty 的测试一直是个头疼的问题:需要对五个受支持的PG数据库大版本(PG 12,13,14,15,16),三个操作系统的大版本(EL7,EL8,EL9),以及几种操作系统的兼容发行版变体(RHEL,CentOS,Alma,Rocky)之间的排列组合进行测试。

所以在 v2.3.1 中,提供了一个新的配置文件 check.yml ,一次性拉起 30 台不同操作系统、不同大版本、不同规格的数据库集群进行测试。这个配置文件(check.yml),也演示了不同大版本的安装方式,具有一定的参考价值。

问题修复

Pigsty v2.3.1 修复了 v2.3.0 中的两个问题。

第一个问题与 Watchdog 有关:当你希望在极端情况下避免脑裂,可以将 patroni_watchdog_mode 参数设置为 required ,在这种情况下,Patroni 的服务现在将自动执行 modprobe softdog 与 chown postgres watchdog 操作,确保 Patroni 拥有 watchdog 的使用权限。

第二个问题是关于从上游下载软件包的:当你下载的软件包中使用了通配符 '*' 时,现在会使用单引号扩起转义,避免受到目标目录中已有软件包的影响。

软件更新

此外,在离线软件包中,一些软件包也更新到了最新的版本。例如,Grafana 升级到了 v10.1 ,引入了一些有趣的新特性。Loki / Promtail 升级至 2.8.4 ,提供 MongoDB 兼容性的中间组件 FerretDB 升级到了 1.9,PG日志分析组件 pgbadger 升级至了 1.12.2,TimescaleDB 扩展升级至了 2.11.2。

Pigsty v2.3.1 的默认软件包中还添加了 SealOS,这是一个快速部署 Kubernetes 集群的精简二进制软件。Pigsty 会在后续版本中对 Kubernetes,以及 Kubernetes 中的数据库有进一步的支持。


相關推薦

2023-09-16

g,另一种基于 HNSW 索引的向量数据库插件hnsw alternative to pgvector 新扩展插件: pg_tle,由 AWS 出品的可信语言存储过程管理/发布/打包扩展 新扩展插件: pgsql-http,在数据库中使用 SQL 接口直接发送HTTP请求处理响应。 其他新增插

2023-04-01

Pigsty v2.0.2 现已发布,现在可以使用 pgvector 插件存储 AI Embedding,并执行高效的最近邻向量搜索。同时,2.0.2 修复了 MinIO CVE-2023-28432 高危漏洞,修复了一些 Bug,并对监控系统面板进行了优化,官方强烈建议升级。 具体更新内容

2023-06-11

ighlight PostgreSQL 16 beta 支持,以及 12 ~ 15 支持。 添加 PGVector for AI Embedding for 12 - 15 为 grafana 添加 6 个额外的面板和数据源插件 添加bin/profile来配置文件远程进程并生成火焰图 添加bin/validate验证 pigsty.yml 配置文件 添加bin

2023-09-26

Pigsty v2.4.1 现已发布,支持 Supabase、PostgresML,与大量实用新扩展插件。 Highlights Supabase 支持:使用 Pigsty 管理的外部 postgres 运行开源 Firebase 替代版本:配置示例 支持 PostgresML: 在 Postgres 中运行 LLM、向量运算、经典机器学

2024-08-29

Pigsty v3.0 正式发布。这是时隔一年半后的又一个大版本更新,带来了海量扩展插件,提供 Oracle 与 SQL Server 兼容性的替换内核,以及完整在本地运行的 SOTA RDS 服务 Pigsty v3 提供了史无前例的 333 个可用扩展插件。包括 121 个扩展 R

2022-06-21

Pigsty v1.5.1 现已发布,具体更新内容如下: 内核 在PostgreSQL 14.0 至 14.3 中,出现了一个BUG。当你使用​​​​ CREATE INDEX CONCURRENTLY | REINDEX CONCURRENTLY 在线重建索引时,有可能会导致静默的 索引数据腐坏。 在 2022.06.16日,Pos

2023-08-23

Pigsty v2.3 现已发布,此版本进一步完善了监控系统、应用生态、并跟进 PostgreSQL 例行的小版本更新(CVE修复)。 Pigsty v2.3 跟随 PostgreSQL 主干小版本进行更新,包括 15.4, 14.9, 13.12, 12.16 以及 16.beta3,此更新修复了一个 CVE 安全漏洞

2023-08-06

Pigsty v2.2 现已发布,迎来史诗级重大升级,基于 Grafana v10 彻底重制,将 PG 可观测性拔高到一个全新阶段,带来了全新的用户体验。Demo:http://demo.pigsty.cc。 此外 Pigsty v2.2 还提供了一个42节点的生产仿真环境沙箱模板,支持了 Cit

2022-05-24

Pigsty v1.5 现已正式发布。此版本包含完整的 Docker 支持,无数使用数据库的软件均可开箱即用。其他改进包括:基础设施自我监控、更好的冷备份支持、兼容 Redis 与 GP 的新 CMDB、ETCD 作为高可用 DCS、更好的日志收集与呈现。Github

2022-12-04

PyTorch 团队在昨日举办的 2022 PyTorch Conference 大会上宣布了 PyTorch 2.0,提供了用于体验的早期版本,并表示稳定版将于 2023 年 3 月上旬发布。 团队介绍道,PyTorch 2.0 是他们向 PyTorch 下一代 2 系列迈出的第一步。在过去的几年里

2022-07-29

一致和内存不足(MOD-3540、MOD-3644) VecSim v0.3.1: HNSW 索引:删除时回收内存 - HNSW 索引的数据结构现在回收内存并在删除时收缩 改进 VecSim v0.3.1: HNSW 指数:删除过程加速 40% 。 为 HNSW 指数提供更准确的内存消耗

2024-08-15

Pigsty 创作者整理发布了 333 个 PostgreSQL 插件清单。 这 333 个扩展在 Pigsty 中都可用,其中 EL 可用 RPM扩展 326 个,Debian/Ubuntu 可用 DEB扩展 312 个。 除去 PostgreSQL 自带的 70 个 Contrib扩展

2023-03-04

更新了什么 ShowDoc 是一个非常适合 IT 团队的在线 API 文档、技术文档工具,既有免费开源版,也有开箱可用的在线官网版。 本次版本 v3.1.0 主要新增了 AI 助手功能,集成了 chatGPT 的能力来辅助用户生成文档内容。 如何使用 AI

2024-07-27

制了数据集的大小。   例如在当前主流的内存型 HNSW 算法下, 业界常用的内存估算方式是:向量个数 * 4 * (向量维度 + 12)。那么 在 DEEP 10M(96维)的 1 千万数据就需要内存达到 4GB 以上,但是 通过 DiskANN 优化后,仅需