HeadlinesBriefing HeadlinesBriefing.com

pg_vectorsearch: extensión de búsqueda vectorial rápida

Hacker News •
×

pg_vectorsearch es una extensión de PostgreSQL para la búsqueda aproximada de vecinos más cercanos (ANN) de alto rendimiento, compartida en GitHub y comentada en Hacker News. Actualmente está en fase alfa y pensada para pruebas, no para producción. Es posible que no se pueda actualizar entre versiones preliminares, por lo que los usuarios deben prever eliminar y volver a crear la extensión y sus índices. El registro de cambios enumera los problemas conocidos.

El índice PRISM de la extensión (Partitioned Routing Index for Similarity Matching) es un método de acceso a índices conceptualmente similar a IVFFlat de pgvector, pero construido en torno a la cuantización RaBitQ, el enrutamiento jerárquico y el particionado. Está implementado en C y admite cálculo de distancias con SIMD (AVX2, AVX512, NEON), inserciones, actualizaciones y eliminaciones dinámicas, y el reequilibrio de las listas de publicación mediante prism_rebalance. El proyecto afirma que PRISM es significativamente más rápido que IVFFlat y HNSW de pgvector tanto en consultas como en la construcción de índices, y que, con un conjunto de datos de 100 millones de vectores, supera a HNSW con una recuperación equivalente en una instancia con una cuarta parte de la memoria.

PRISM utiliza un árbol jerárquico de centroides para dividir los vectores en grupos, y depende de la caché de búfer de PostgreSQL para mantener ese árbol en memoria. Los vectores se cuantizan con RaBitQ y se almacenan en listas de publicación. Sus límites de error permiten que las búsquedas descarten los vectores que no pueden ser vecinos más cercanos, lo que reduce el número de reordenamientos con precisión completa necesarios.

Los usuarios pueden almacenar vectores en columnas nativas vec32 o vec16, o construir un índice PRISM directamente sobre columnas vector o halfvec de pgvector existentes sin cambiar sus tablas ni sus consultas. Ambas vías usan los mismos operadores y ajustes, como prism.nprobe, para equilibrar la recuperación frente a la velocidad.

Fuente: Hacker News · Resumido por HeadlinesBriefing