Optimización de pgvector: búsqueda de vectores HNSW 4 veces más rápida con AlloyDB
ARCHITECT ANÁLISIS DESTACADO

Optimización de pgvector: búsqueda de vectores HNSW 4 veces más rápida con AlloyDB

POR

Darshana Sivakumar

FUENTE

Cloud Blog

DATE

READ

6 min de lectura

AlloyDB es un servicio de base de datos compatible con PostgreSQL que combina lo mejor de PostgreSQL de código abierto con la tecnología avanzada de Google, ofreciendo una escalabilidad masiva y alta disponibilidad. …

AlloyDB es una base de datos administrada, compatible con PostgreSQL, construida para las cargas de trabajo empresariales más exigentes. Combina lo mejor de PostgreSQL de código abierto con la tecnología avanzada de Google, ofreciendo una escalabilidad masiva, alta disponibilidad y capacidades de IA nativas. Sirve como un almacén relacional de alto rendimiento, un backend unificado para la búsqueda vectorial y de texto completo, y un motor de análisis que es hasta 100 veces más rápido que PostgreSQL estándar. La búsqueda vectorial es la base de las aplicaciones modernas de IA y RAG (Retrieval Augmented Generation). Para los desarrolladores que utilizan AlloyDB y otras bases de datos PostgreSQL, pgvector es una extensión ampliamente adoptada para almacenar, indexar y consultar las incrustaciones vectoriales, y HNSW (Hierarchical Navigable Small World) es un algoritmo basado en grafos altamente eficiente diseñado para la búsqueda aproximada de vecinos más cercanos a través de estructuras multicapa. Con el motor columnar Accelerated HNSW en AlloyDB (ahora en preview), puede lograr hasta 4 veces más consultas por segundo (QPS) para la búsqueda vectorial en comparación con HNSW estándar de PostgreSQL. Las aplicaciones de IA empresarial enfrentan un compromiso constante entre velocidad y precisión. Cuando se buscan millones o miles de millones de vectores, maximizar las Consultas por Segundo (QPS) sin sacrificar la calidad de la búsqueda (recuperación) es crítico para escalar las cargas de trabajo de producción. La extensión pgvector de PostgreSQL ofrece HNSW como uno de los índices que puede acelerar las búsquedas de Vecinos Más Cercanos (ANN) aproximadas. Profundicemos en cómo AlloyDB resuelve el compromiso entre velocidad y precisión. Nota: Si bien esta publicación se centra en el rendimiento de HNSW, vale la pena señalar que HNSW es solo una parte del conjunto de herramientas vectorial avanzado de AlloyDB. AlloyDB también cuenta con ScaNN, un índice de vanguardia respaldado por más de 14 años de investigación de Google, lo que le brinda la flexibilidad de elegir el índice perfecto para su carga de trabajo. Además, para los casos de uso que requieren una precisión absoluta, siempre está disponible la búsqueda KNN (k-Nearest Neighbor) estándar para una recuperación del 100%. Consulte nuestra Guía para elegir un índice vectorial para ver cómo se comparan. El motor columnar de AlloyDB es una caché en memoria integrada que almacena automáticamente los datos solicitados con frecuencia en un formato columnar especializado y optimizado para la búsqueda. Esto permite a AlloyDB manejar consultas analíticas pesadas hasta 100 veces más rápidas que PostgreSQL estándar. Además, acelera las búsquedas ANN almacenando el índice en memoria, utilizando una disposición de memoria vectorial para recorridos rápidos y evitando la sobrecarga del administrador de búfer estándar de PostgreSQL. Visualización del rendimiento Para comprender las características de rendimiento del motor columnar Accelerated HNSW, graficamos las curvas QPS vs. Recall estándar para el conjunto de datos GloVe 100 Angular buscando más de 1 millón de registros con un límite de 100. La ejecución de este script de prueba arroja la siguiente visualización: Nota: Estas mediciones se tomaron en una máquina AlloyDB C4A de 16 vCPU. Debido a la inherente aleatoriedad en la construcción de grafos HNSW, los resultados pueden variar ligeramente entre ejecuciones. Los datos revelan dos beneficios transformadores: Ganancias masivas en el rendimiento: Para cualquier objetivo de recuperación (por ejemplo, 0,95), QPS se incrementa aproximadamente en 4,2x a 4,9x. Esto le permite manejar búsquedas vectoriales concurrentes significativamente más en el mismo hardware. Mejoras significativas en la recuperación (precisión): Por otro lado, a un nivel de QPS fijo, el motor columnar Accelerated HNSW proporciona un importante impulso en la recuperación. Por ejemplo, observamos que a ~350 QPS (en el gráfico anterior), habilitar el motor columnar mejora la recuperación desde aproximadamente 0,78 a más de 0,94 – una ganancia de recuperación de 0,163. Esto significa que sus aplicaciones de IA obtienen resultados mucho más precisos sin impacto en la latencia. Es importante tener en cuenta que la línea base (azul) ya representa el índice que se almacena completamente en la caché compartida de PostgreSQL. Las ganancias de rendimiento mostradas aquí no son el resultado de mover datos del disco a la RAM, sino más bien el resultado de una arquitectura de memoria más eficiente. Cómo funciona: Motor columnar Accelerated HNSW En las arquitecturas estándar de PostgreSQL, las operaciones de índice utilizan la caché compartida. Incluso cuando los datos están completamente en la memoria, la base de datos aún incurre en una sobrecarga significativa del administrador de búfer, que debe manejar operaciones como el etiquetado y desetiquetado de páginas, la adquisición y liberación de bloqueos, la búsqueda de la tabla de búfer y la administración LRU. El motor columnar de AlloyDB es una caché en memoria integrada que almacena datos en un formato columnar especializado y optimizado para la búsqueda. Con esta versión, AlloyDB puede usar el motor columnar Accelerated HNS para: Fijar el índice: El índice HNSW de pgvector se fija directamente en la memoria del motor columnar para garantizar un acceso rápido. Acceso vectorial: Utiliza una disposición de memoria específicamente diseñada para los recorridos de alto concurrencia y punteros requeridos por los grafos HNSW. Saltar la sobrecarga del búfer: Al navegar por el gráfico en un espacio de memoria especializado, AlloyDB evita las cuellos de botella del administrador de búfer estándar. Este cambio arquitectónico es lo que permite las mejoras dramáticas en QPS y recuperación mostradas anteriormente, incluso en comparación con un índice estándar totalmente almacenado. ¿Por qué es importante? Para las aplicaciones a escala empresarial, no se trata solo de una base de datos más rápida, sino de costo y calidad: Costos de infraestructura reducidos: Logre el mismo rendimiento con recursos computacionales significativamente menores. Mayor precisión de la IA: Logre una recuperación y calidad más altas a velocidades que antes solo eran posibles para búsquedas de calidad “draft” (baja velocidad, baja precisión). Sin cambios de aplicación requeridos: Debido a que está integrado en AlloyDB, obtiene estas ganancias utilizando la misma sintaxis SQL pgvector estándar. Tenga en cuenta que el motor también utiliza memoria, pero está altamente comprimida y gestionada cuidadosamente. Debido a que el motor almacena datos vectoriales en un formato columnar eficiente, la huella de memoria es mínima en comparación con las ganancias de rendimiento, lo que lo convierte en una compensación muy favorable para las cargas de trabajo empresariales. Guía de inicio rápido Para probar el motor columnar Accelerated HNSW en AlloyDB, siga estos pasos: 1. Habilite el motor columnar e indexación de caché Asegúrese de que ambas banderas google_columnar_engine.enabled y google_columnar_engine.enable_index_caching estén establecidas en on para su instancia de AlloyDB. 2. Agregue el índice HNSW al motor columnar Una vez que haya creado su índice HNSW mediante pgvector, ejecute el siguiente comando SQL para almacenarlo en el motor columnar: code_block ‘);), (’language’, ‘’), (‘caption’, )])> 3. Recursos adicionales ¿Es HNSW el índice vectorial adecuado para su caso de uso? Consulte nuestra guía “Elija un índice vectorial en AlloyDB AI”