pg_vectorsearchは、高性能な近似最近傍(ANN)検索のためのPostgreSQL拡張機能です。GitHubで公開され、Hacker Newsでも話題になりました。現在はアルファ版であり、本番環境ではなくテスト用途を想定しています。プレリリース版間でのアップグレードができない場合があるため、ユーザーは拡張機能とそのインデックスを削除して再作成する計画を立てておく必要があります。既知の問題はチェンジログに記載されています。
この拡張機能のPRISM(Partitioned Routing Index for Similarity Matching)インデックスは、概念的にはpgvectorのIVFFlatに似たインデックスアクセスメソッドですが、RaBitQ量子化、階層的ルーティング、パーティショニングを基盤としています。C言語で実装されており、SIMDによる距離計算(AVX2、AVX512、NEON)、動的な挿入・更新・削除、そしてprism_rebalanceによるポスティングリストの再バランス調整をサポートします。プロジェクトによると、PRISMはクエリとインデックス構築の両方で、pgvectorのIVFFlatおよびHNSWより大幅に高速であり、1億ベクトルのデータセットでは、メモリが4分の1のインスタンス上で同等の再現率においてHNSWを上回るとされています。
PRISMは階層的なセントロイドツリーを用いてベクトルをクラスターに分割し、そのツリーをPostgreSQLのバッファキャッシュによってウォームな状態に保ちます。ベクトルはRaBitQで量子化され、ポスティングリストに格納されます。誤差上限により、最近傍になり得ないベクトルを検索から除外できるため、必要な全精度での再ランキングの回数を減らせます。
ユーザーは、ネイティブのvec32またはvec16列にベクトルを格納することも、既存のpgvectorのvectorまたはhalfvec列に直接PRISMインデックスを作成することもできます。テーブルやクエリを変更する必要はありません。どちらの方法も同じ演算子と、再現率と速度のトレードオフを調整するprism.nprobeなどのチューニング設定を使用します。
出典: Hacker News · 要約:HeadlinesBriefing