HeadlinesBriefing HeadlinesBriefing.com

pg_vectorsearch : extension de recherche vectorielle rapide

Hacker News •
×

pg_vectorsearch est une extension PostgreSQL destinée à la recherche approximative de plus proches voisins (ANN) haute performance, partagée sur GitHub et discutée sur Hacker News. Elle est actuellement en version alpha et destinée aux tests, et non à la production. La mise à niveau entre les préversions peut ne pas être possible ; les utilisateurs doivent donc prévoir de supprimer puis de recréer l'extension et ses index. Le journal des modifications répertorie les problèmes connus.

L'index PRISM de l'extension (Partitioned Routing Index for Similarity Matching) est une méthode d'accès aux index conceptuellement proche de l'IVFFlat de pgvector, mais construite autour de la quantification RaBitQ, du routage hiérarchique et du partitionnement. Il est implémenté en C et prend en charge le calcul de distances SIMD (AVX2, AVX512, NEON), les insertions, mises à jour et suppressions dynamiques, ainsi que le rééquilibrage des listes de postage via prism_rebalance. Le projet affirme que PRISM est nettement plus rapide que l'IVFFlat et le HNSW de pgvector, tant pour les requêtes que pour la construction des index, et que sur un jeu de données de 100 millions de vecteurs, il surpasse HNSW à rappel équivalent sur une instance disposant d'un quart de la mémoire.

PRISM utilise un arbre hiérarchique de centroïdes pour répartir les vecteurs en grappes, et s'appuie sur le cache de tampons de PostgreSQL pour maintenir cet arbre en mémoire. Les vecteurs sont quantifiés avec RaBitQ et stockés dans des listes de postage. Ses bornes d'erreur permettent aux recherches d'écarter les vecteurs qui ne peuvent pas être des plus proches voisins, réduisant ainsi le nombre de réordonnancements en pleine précision nécessaires.

Les utilisateurs peuvent stocker les vecteurs dans des colonnes natives vec32 ou vec16, ou construire un index PRISM directement sur des colonnes vector ou halfvec de pgvector existantes, sans modifier leurs tables ni leurs requêtes. Les deux approches utilisent les mêmes opérateurs et les mêmes paramètres de réglage, comme prism.nprobe, pour arbitrer entre rappel et vitesse.

Source: Hacker News · Résumé par HeadlinesBriefing