LinkedIn 推出了 pg_vectorsearch,这是一个为 PostgreSQL 设计的开源扩展,旨在为 `pgvector` 扩展中常用的 HNSW(Hierarchical Navigable Small World)和 IVFFlat 索引提供高性能的替代方案。这一新工具的核心是 PRISM 索引,它将底层架构从基于图的遍历转向由质心和分区组成的层级结构。通过将向量空间组织成聚类树,该索引与 HNSW 所需的复杂图结构相比,能够提供更可预测的内存占用和更快的构建时间。

LinkedIn pg_vectorsearch 徽标和品牌
LinkedIn 为 PostgreSQL 开发的新开源 pg_vectorsearch 扩展。www.linkedin.com

这张图片代表了 pg_vectorsearch 扩展及其 PRISM 索引架构的官方品牌标识。

PRISM 索引通过使用分层 k-means 聚类来划分向量空间。在查询期间,系统执行逐层束搜索(beam search)以识别相关的分区,然后扫描其关联的倒排列表。为了减少移入内存的数据量,该扩展采用了 RaBitQ(Random Bit Quantization),它使用大约每维度一个比特来表示向量。这种量化包含数学误差边界,允许系统为候选对象建立阈值。如果候选对象的下限超过当前最佳结果,则可以在不从 PostgreSQL 堆中获取全精度向量的情况下将其丢弃,从而显著减少随机 I/O。

虽然 PRISM 提供了显著的性能提升——据报道,在 1 亿个向量上实现了 6 毫秒的查询延迟,且内存消耗比 HNSW 少 4 倍——但它也引入了特定的技术限制。该索引目前支持的最大维度为 1,968,这可能会排除高维度的使用场景。此外,该扩展需要 PostgreSQL 18 或更高版本,这可能为旧有的生产环境带来迁移障碍。为了在分区边界附近保持准确性,PRISM 可以在相邻分区中存储向量的重复副本,这一策略确保了由于质心路由的固有限制而可能遗漏的邻近点不会被漏掉。

由于 PRISM 是作为原生 PostgreSQL 索引访问方法实现的,它能直接与数据库的标准缓冲区管理、预写日志(WAL)和多版本并发控制(MVCC)集成。这种集成确保了质心树中频繁访问的部分保留在共享缓冲区缓存中,而使用“FASTSCAN”页面允许同时对 32 个向量进行 SIMD 向量化评分。然而,随着索引通过新插入不断增长,倒排列表页面的物理相邻性可能会随着时间的推移而退化,这可能会影响其与初始索引构建相比的顺序扫描效率。