pgvector 0.6.0:并行索引构建速度提升至30倍

pgvector 0.6.0:并行索引构建速度提升至30倍

💡 原文英文,约700词,阅读约需3分钟。
📝

内容提要

pgvector 0.6.0发布,显著提升了HNSW索引的并行构建速度,未记录表的构建速度提高至30倍。新版本支持多线程构建,1百万个1536维向量的索引构建时间从1小时27分钟缩短至9.5分钟,性能提升显著。

🔎

延伸解读

并行构建的调优参数

pgvector 0.6.0 通过 max_parallel_maintenance_workers 参数控制并行构建索引的线程数。文章建议将其设置为 CPU 核心数的一半,这也是 Supabase 平台的默认值。测试表明,该参数不影响索引的准确率和查询每秒(QPS),因此可以放心调整以加速构建。

未记录表:以可靠性换取速度

未记录表(unlogged table)不将修改写入预写式日志(WAL),从而跳过索引构建中不可并行的最终扫描和 WAL 写入步骤。对于嵌入数据,原始数据通常另行存储且可重新生成,因此使用未记录表是合适的。文章数据显示,在 ef_construction=200 时,构建时间从 1 小时 27 分缩短至 3 分 37 秒,提升约 24 倍。

性能提升的边界与成本权衡

并行构建的加速比并非与核心数线性增长。在 16 核实例上,0.6.0 比 0.5.1 快 7-9 倍;在 64 核实例上,提升可达 13.5 倍。文章还提到一个节省成本的技巧:在大型实例上构建索引,完成后切换回较便宜的实例。这利用了构建阶段需要更多计算资源,而查询阶段资源需求较低的特点。

❓

Q&A

pgvector 0.6.0的主要改进是什么?

pgvector 0.6.0显著提升了HNSW索引的并行构建速度,未记录表的构建速度提高至30倍。

使用pgvector 0.6.0构建索引的时间有多大变化?

构建1百万个1536维向量的索引时间从1小时27分钟缩短至9.5分钟,速度提升了9倍。

pgvector 0.6.0如何支持多线程构建?

新版本支持多线程构建,解决了大数据集构建的瓶颈,允许使用多个线程同时构建索引。

未记录表在pgvector中的作用是什么?

未记录表的修改不记录在写前日志中,适合嵌入数据,可以进一步减少构建时间。

pgvector 0.6.0与0.5.1版本在性能上有什么比较?

0.6.0版本的索引构建时间比0.5.1快7-9倍,查询每秒和准确率保持不变。

如何进一步优化pgvector的索引构建性能?

可以使用更强大的实例进行索引构建,构建完成后再切换回更便宜的实例。

🏷️

标签

➡️

继续阅读