Compartir a través de


Habilitación y uso de la extensión diskANN para Azure Database for PostgreSQL: servidor flexible (versión preliminar)

DiskANN es un algoritmo escalable de búsqueda aproximada del vecino más próximo para el vector de búsqueda eficiente a cualquier escala. Ofrece una alta recuperación, consultas elevadas por segundo (QPS) y baja latencia de consultas, incluso para conjuntos de datos de miles de millones de datos. Esto hace que sea una herramienta eficaz para controlar grandes volúmenes de datos. Más información sobre DiskANN de Microsoft

La extensión pg_diskann para el servidor flexible de Azure Database for PostgreSQL agrega compatibilidad con el uso de DiskANN para la indexación y la búsqueda de vectores eficaces.

Inscribirse en la característica en vista previa de pg_diskann

pg_diskann para Azure Database for PostgreSQL: servidor flexible requiere que los usuarios se registren mediante nuestro formulario de vista previa. Siga los pasos siguientes para registrarse:

  1. Abra el formulario de vista previa
  2. Rellene todos los detalles pertinentes. Necesitaremos el identificador de suscripción de Azure para habilitarlo.

Nota:

Después de rellenar el formulario de vista previa, la solicitud tardará algún tiempo en aprobarse. La confirmación se enviará al correo electrónico.

Habilitación de la extensión pg_diskann

Para poder habilitar pg_diskann en la instancia de servidor flexible de Azure Database for PostgreSQL, debe agregarla a la lista de permitidos, tal como se describe en cómo usar extensiones de PostgreSQL y comprobar si se ha agregado correctamente mediante la ejecución de SHOW azure.extensions;.

Recorte de pantalla de la selección de pg_diskann en los parámetros del servidor.

Importante

Esta característica en vista previa solo está disponible para las instancias de servidor flexible de Azure Database for PostgreSQL recién implementadas.

A continuación, puede instalar la extensión mediante la conexión a la base de datos de destino y la ejecución del comando CREATE EXTENSION. Debe repetir el comando por separado para cada base de datos en la que quiera que la extensión esté disponible.

CREATE EXTENSION IF NOT EXISTS pg_diskann CASCADE;

Este comando habilita pgvector si aún no se ha instalado en la base de datos PostgreSQL.

Nota:

Para quitar la extensión de la base de datos conectada actualmente, use DROP EXTENSION vector;.

Uso del método de acceso a índices diskann

Una vez instalada la extensión, puede crear un índice diskann en una columna de tabla que contenga datos vectoriales. Por ejemplo, para crear un índice en la columna embedding de la tabla my_table, use el siguiente comando:

CREATE TABLE my_table (
 id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
 embedding public.vector(3)
 -- other columns
);
-- insert dummy data
INSERT INTO my_table (embedding) VALUES
('[1.0, 2.0, 3.0]'),
('[4.0, 5.0, 6.0]'),
('[7.0, 8.0, 9.0]');
-- create a diskann index by using Cosine distance operator
CREATE INDEX my_table_embedding_diskann_idx ON my_table USING diskann (embedding vector_cosine_ops)

Opciones de índice

Al crear un índice con diskann, puede especificar varios parámetros para controlar su comportamiento. Estas son las opciones que tenemos actualmente:

  • max_neighbors: número máximo de bordes por nodo en el gráfico. (el valor predeterminado es 32)
  • l_value_ib: tamaño de la lista de búsqueda durante la compilación del índice (el valor predeterminado es 50)
CREATE INDEX my_table_embedding_diskann_custom_idx ON my_table USING diskann (embedding vector_cosine_ops)
WITH (
 max_neighbors = 48,
 l_value_ib = 100
 );

El valor L para el examen de índices (l_value_is) se puede establecer para toda la conexión o para cada transacción (mediante SET LOCAL dentro de un bloque de transacciones):

SET diskann.l_value_is = 100;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- uses 100 candidates

Postgres decidirá automáticamente cuándo usar el índice DiskANN. Si hay escenarios en los que siempre quiera usar el índice, use el siguiente comando:

SET LOCAL enable_seqscan TO OFF;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- forces the use of index

Progreso de indexación

Con PostgreSQL 12 y versiones posteriores, puede usar pg_stat_progress_create_index para comprobar el progreso de la indexación.

SELECT phase, round(100.0 * blocks_done / nullif(blocks_total, 0), 1) AS "%" FROM pg_stat_progress_create_index;

Las fases para compilar índices DiskANN son:

  1. initializing
  2. loading tuples

Advertencia

En algunos casos, los usuarios pueden experimentar tiempos de compilación de índices lentos.

Selección de la función de acceso al índice

El tipo de vector permite realizar tres tipos de búsquedas en los vectores almacenados. Debe seleccionar la función de acceso correcta para el índice para que la base de datos pueda tener en cuenta el índice al ejecutar las consultas.

pg_diskann admite los siguientes operadores de distancia

  • vector_l2_ops: distancia euclidiana <->
  • vector_cosine_ops: distancia de coseno <=>
  • vector_ip_ops: producto interno <#>