Mantener índices de vectores

En esta página se describen las opciones para mantener tus índices vectoriales. Mantener los índices ayuda a que se adapten a los cambios en los datos que puedan afectar a la precisión de los resultados de búsqueda. Sigue las estrategias de esta página para evitar que el rendimiento de las consultas se deteriore a medida que crece tu conjunto de datos.

Antes de empezar

  • Instala o actualiza las extensiones vector y alloydb_scann.

    1. Si las extensiones vector y alloydb_scann no están instaladas, instala las versiones más recientes de las extensiones.

      CREATE EXTENSION IF NOT EXISTS vector;
      CREATE EXTENSION IF NOT EXISTS alloydb_scann;
      
    2. Si las extensiones vector y alloydb_scann ya están instaladas, actualízalas a la versión más reciente.

      ALTER EXTENSION vector UPDATE;
      ALTER EXTENSION alloydb_scann UPDATE;
      

Ver métricas de índice vectorial

Si tu tabla se actualiza o se insertan datos con frecuencia, te recomendamos que reindexes periódicamente el índice ScaNN para mejorar la precisión de la recuperación de tu índice. Puede monitorizar las métricas de índice para ver los cambios en las distribuciones de vectores o las mutaciones de vectores desde que se creó el índice y, a continuación, volver a indexar según corresponda.

Para obtener más información sobre las métricas, consulta Ver métricas de índice vectorial.

Mantener los índices automáticamente

Puede usar la marca de base de datos scann.enable_preview_features (GUC) junto con el parámetro auto_maintenance a nivel de índice al crear un índice de ScaNN. Si se usan estos ajustes conjuntamente, AlloyDB puede gestionar el índice de forma incremental de modo que, cuando aumente el tamaño de tu conjunto de datos, se dividan las particiones atípicas grandes. Al dividir las particiones, AlloyDB intenta proporcionar una mejor QPS y mejores resultados de búsqueda.

Las actualizaciones que se realicen en el índice como resultado del mantenimiento automático son permanentes hasta que AlloyDB vuelva a actualizar el índice.

Para que AlloyDB mantenga un índice automáticamente, habilita la marca scann.enable_preview_features:

gcloud alloydb instances update INSTANCE_ID \
     --database-flags scann.enable_preview_features=on \
     --region=REGION_ID \
     --cluster=CLUSTER_ID \
     --project=PROJECT_ID

Haz los cambios siguientes:

  • INSTANCE_ID: el ID de la instancia.
  • REGION_ID: la región en la que se encuentra la instancia (por ejemplo, us-central1).
  • CLUSTER_ID: el ID del clúster en el que se coloca la instancia.
  • PROJECT_ID: el ID del proyecto en el que se encuentra el clúster.

Después de habilitar la marca scann.enable_preview_features, puedes habilitar el mantenimiento automático de los índices o la función scann_index_maintenance para invocar el mantenimiento manualmente.

Habilitar el mantenimiento automático durante la creación de índices

Para crear un índice de ScaNN con el mantenimiento automático habilitado, ejecuta el siguiente comando de ejemplo:

CREATE INDEX INDEX_NAME ON TABLE
  USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)
  WITH (num_leaves=NUM_LEAVES_VALUE, auto_maintenance=on);

Haz los cambios siguientes:

  • INDEX_NAME: el nombre del índice que quieras crear (por ejemplo, my-scann-index). Los nombres de los índices se comparten en toda la base de datos. Asegúrate de que cada nombre de índice sea único para cada tabla de tu base de datos.

  • TABLE: la tabla a la que se va a añadir el índice.

  • EMBEDDING_COLUMN: una columna que almacena vector datos.

  • DISTANCE_FUNCTION: la función de distancia que se va a usar con este índice. Elige una de estas opciones:

    • Distancia L2: l2

    • Producto escalar: dot_product

    • Distancia del coseno: cosine

  • NUM_LEAVES_VALUE: el número de particiones que se aplicarán a este índice. Puede ser cualquier valor entre 1 y 1048576. Para obtener más información sobre cómo decidir este valor, consulta Ajustar un índice de ScaNN.

Gestionar las hojas para buscar particiones divididas automáticamente

Si has habilitado el mantenimiento automático de los índices, AlloyDB dividirá automáticamente las particiones cuando se alcance el umbral de num_leaves. A medida que aumenta el número de particiones debido a estas divisiones, debes ajustar el número de hojas que se van a buscar para mantener un rendimiento óptimo.

Para gestionar el número de hojas que se deben buscar automáticamente, usa pct_leaves_to_search. Este parámetro le permite especificar un porcentaje del número de particiones que se van a buscar. Si prevés que tu conjunto de datos aumentará considerablemente, empieza asignando el valor pct_leaves_to_search a 1. El parámetro está inhabilitado de forma predeterminada.

Asigna a este campo el porcentaje del número actual de particiones. Por ejemplo, para buscar el 1 % del número actual de particiones, defina este valor en 1.

Puede asignar a este parámetro cualquier valor entre 0 y 100. El valor predeterminado es 0, que inhabilita este parámetro y usa scann.num_leaves_to_search para calcular el número de hojas que se deben buscar.

Para definir la marca pct_leaves_to_search en tu base de datos, ejecuta el siguiente comando:

ALTER DATABASE DATABASE_NAME SET scann.pct_leaves_to_search = PERCENTAGE_LEAVES_TO_SEARCH;

Haz los cambios siguientes:

  • DATABASE_NAME: el nombre de la base de datos.
  • PERCENTAGE_LEAVES_TO_SEARCH: porcentaje de num_leaves que se va a buscar.

Invocar el mantenimiento manualmente

Si quieres invocar el mantenimiento de un índice concreto bajo demanda, ejecuta el siguiente comando:

SELECT scann_index_maintenance('INDEX_NAME');

Reconstruir el índice manualmente

Puedes volver a crear el índice manualmente si quieres hacerlo con las configuraciones que especificaste cuando se creó.

Para volver a crear el índice manualmente, ejecuta el siguiente comando:

REINDEX INDEX CONCURRENTLY INDEX_NAME;

Sustituye INDEX_NAME por el nombre del índice que quieras volver a compilar (por ejemplo, my-scann-index). Los nombres de los índices se comparten en toda la base de datos. Asegúrate de que cada nombre de índice sea único para cada tabla de tu base de datos.

Para obtener más información sobre la reindexación en PostgreSQL, consulta REINDEX.

Siguientes pasos