Timescale 推出了 pg_vectorsearch,這是一個處於 alpha 階段的 PostgreSQL 擴充功能,旨在提供高效能的近似最近鄰(ANN)搜尋。其核心技術為 PRISM 索引(Partitioned Routing Index for Similarity Matching),這是一種 PostgreSQL 原生的索引存取方法,概念上類似 pgvector 的 IVFFlat,但結合了最先進的量化、路由和分區技術。官方宣稱 PRISM 索引在查詢和索引建立速度上均顯著優於 pgvector 的 IVFFlat 和 HNSW。特別是在 1 億向量資料集上,PRISM 在等效召回率下比基於圖的 HNSW 更快,且僅需四分之一的記憶體。
PRISM 使用分層質心樹將向量分區為叢集,並依賴 PostgreSQL 緩衝區快取將該樹保持在記憶體中。向量經過 RaBitQ 量化並存儲在針對 SIMD 距離計算最佳化的頁面佈局中。RaBitQ 編碼帶有誤差界限,允許搜尋排除不可能是最近鄰的向量,從而減少需要對表中存儲的全精度向量進行重新排序的數量。查詢流程包括:遍歷質心樹尋找最近叢集、掃描發布列表尋找候選、RaBitQ 兩階段過濾(估計→誤差界限→重新排序)、從堆中進行全精度重新排序,最後返回 k 個最近鄰。
該擴充功能支援動態更新(插入、更新和刪除),並透過 prism_rebalance 程序進行發布列表分割。pg_vectorsearch 與 pgvector 相容,可直接對現有的 vector 和 halfvec 欄位建立索引,無需修改表格或查詢。它支援兩種使用方式:一是使用其原生的 vec32 (float32) 或 vec16 (float16) 類型;二是安裝在 pgvector 旁邊,直接對現有的 pgvector 欄位建立 PRISM 索引。兩者使用相同的運算子 (<->, <#>, <=>) 和調優參數。
技術要求方面,pg_vectorsearch 需要 PostgreSQL 18 或更高版本,以及 GNU C11 編譯器(GCC 11+ 或 Clang 14+)和 Meson 建置系統。目前狀態為 alpha,僅供測試,不建議用於生產環境,預覽版之間的升級可能不可行,需刪除並重建擴充功能及其索引。
事件背景
PRISM 索引基於 RaBitQ 量化技術,原文 References 部分引用了標題為 'Binary quantization with theoretical error bounds' 的 SIGMOD 2024 論文。其架構參考了 SPFresh(SOSP 2023,用於增量更新的 LIRE 協議)、SPANN(NeurIPS 2021,十億級 ANN 與邊界複製)以及 ScaNN for AlloyDB(Google,分層聚類)。pg_vectorsearch 採用 PostgreSQL 授權。
社群觀察
社群討論指出了該擴充功能的限制和競爭環境。用戶 devy 指出 PRISM 索引將向量維度上限設為 1968,若現有 HNSW 索引維度超過此數則無法使用;同時強調必須升級至 PostgreSQL 18 以上版本。用戶 EgregiousCube 表示目前使用 VectorChord 並對低記憶體向量索引工具的競爭感到興奮,認為這能利用現代 NVMe 驅動器的速度來降低 PostgreSQL 成本。用戶 arunmu 質疑 Timescale 為何不改進或維護其先前專案 pgvectorscale,而是推出新索引。用戶 potomushto 詢問是否支援位元精度和 hammer 距離運算子。用戶 Rapzid 詢問是否支援過濾功能,並指出目前僅支援後過濾(post filtering),對如何有效實現租戶/用戶/權限範圍表示疑惑。



