LinkedIn ha introducido pg_vectorsearch, una extensión de código abierto para PostgreSQL diseñada para proporcionar una alternativa de alto rendimiento a los índices comunes HNSW (Hierarchical Navigable Small World) e IVFFlat utilizados en la extensión `pgvector`. El núcleo de esta nueva herramienta es el índice PRISM, que cambia la arquitectura subyacente de una navegación basada en gráficos a una jerarquía de centroides y particiones. Al organizar el espacio vectorial en un árbol de clústeres, el índice permite un uso de memoria más predecible y tiempos de construcción más rápidos en comparación con las complejas estructuras de gráficos que requiere HNSW.

Logotipo y marca de pg_vectorsearch de LinkedIn
La nueva extensión de código abierto pg_vectorsearch de LinkedIn para PostgreSQL.www.linkedin.com

Esta imagen representa la marca oficial de la extensión pg_vectorsearch y su arquitectura de índice PRISM.

El índice PRISM funciona particionando el espacio vectorial mediante el agrupamiento jerárquico k-means. Durante una consulta, el sistema realiza una búsqueda de haz nivel por nivel para identificar las particiones relevantes y luego escanea sus listas de publicaciones asociadas. Para minimizar la cantidad de datos movidos a la memoria, la extensión emplea RaBitQ (Random Bit Quantization), que representa los vectores utilizando aproximadamente un bit por dimensión. Esta cuantización incluye límites de error matemático, lo que permite al sistema establecer un umbral para los candidatos. Si el límite inferior de un candidato supera el mejor resultado actual, este puede descartarse sin tener que recuperar el vector de precisión completa desde el montón de PostgreSQL, reduciendo significativamente la E/S aleatoria.

Si bien PRISM ofrece mejoras de rendimiento significativas —alcanzando supuestamente una latencia de consulta de 6 ms en 100 millones de vectores con 4 veces menos memoria que HNSW— introduce restricciones técnicas específicas. El índice admite actualmente un máximo de 1,968 dimensiones, lo que puede excluir casos de uso de alta dimensionalidad. Además, la extensión requiere la versión 18 o superior de PostgreSQL, lo que podría crear una barrera de migración para entornos de producción heredados. Para mantener la precisión cerca de los límites de las particiones, PRISM puede almacenar copias duplicadas de los vectores en particiones adyacentes, una estrategia que garantiza que no se omitan vecinos debido a las limitaciones inherentes del enrutamiento basado en centroides.

Debido a que PRISM está implementado como un método de acceso a índices nativo de PostgreSQL, se integra directamente con la gestión de búfer estándar de la base de datos, el registro de escritura anticipada (WAL) y el control de concurrencia de múltiples versiones (MVCC). Esta integración garantiza que las partes frecuentemente accedidas del árbol de centroides permanezcan en la caché de búfer compartido, mientras que el uso de páginas 'FASTSCAN' permite la puntuación vectorizada SIMD de 32 vectores simultáneamente. Sin embargo, a medida que el índice crece mediante nuevas inserciones, la adyacencia física de las páginas de la lista de publicaciones puede degradarse con el tiempo, lo que podría afectar la eficiencia de los escaneos secuenciales en comparación con la construcción inicial del índice.