Prácticas recomendadas para optimizar los índices de ScaNN

Selecciona una versión de la documentación:

En esta página se ofrecen recomendaciones sobre cómo ajustar los parámetros de índice de AlloyDB Omni para conseguir un equilibrio óptimo entre la recuperación y las consultas por segundo. Los parámetros recomendados para el índice de vecino más cercano escalable (ScaNN) varían en función de si decides crear un índice de árbol de dos o tres niveles.

Creación de índices de ScaNN

Para obtener más información, consulta la referencia del índice de ScaNN.

Índice de árbol de dos niveles

Para aplicar las recomendaciones que le ayudarán a encontrar los valores óptimos de num_leaves y num_leaves_to_search para su conjunto de datos, siga estos pasos:

  1. Para crear el índice ScaNN optimizado para los siguientes casos, asigna al parámetro num_leaves el siguiente valor, donde "rows" es el número de filas de la tabla indexada:
    • Tiempo de compilación y calidad del índice equilibrados: asigna el valor num_leaves a sqrt(rows).
    • quality asigna a num_leaves el valor rows/100.
  2. Ejecuta tus consultas de prueba y aumenta el valor de scann.num_of_leaves_to_search hasta que alcances el intervalo de recuerdo objetivo (por ejemplo, el 95 %). Para obtener más información sobre cómo analizar tus consultas, consulta el artículo Analizar tus consultas.
  3. Anota la proporción entre scann.num_leaves_to_search y num_leaves, que se usará en los pasos siguientes. Esta proporción proporciona una aproximación del conjunto de datos que te ayudará a alcanzar el recuerdo objetivo.

    Si trabajas con vectores de alta dimensión (500 dimensiones o más) y quieres mejorar el recuerdo, prueba a ajustar el valor de scann.pre_reordering_num_neighbors. El valor predeterminado es 500 * K, donde K es el límite que has definido en la consulta.
  4. Si tu QPS es demasiado bajo después de que tus consultas alcancen un recuerdo objetivo, sigue estos pasos:
    1. Vuelve a crear el índice y aumenta los valores de num_leaves y scann.num_leaves_to_search según las siguientes directrices:
      • Asigna a num_leaves un factor mayor de la raíz cuadrada del número de filas. Por ejemplo, si el índice tiene num_leaves definido como la raíz cuadrada del número de filas, prueba a duplicar la raíz cuadrada. Si el valor ya es doble, prueba a asignarle el triple de la raíz cuadrada.
      • Aumenta scann.num_leaves_to_search según sea necesario para mantener su proporción con num_leaves, que has indicado en el paso 3.
      • Asigna a num_leaves un valor igual o inferior al número de filas dividido entre 100.
    2. Vuelve a ejecutar las consultas de prueba. Mientras ejecutas las consultas de prueba, experimenta con la reducción de scann.num_leaves_to_search para encontrar un valor que aumente las CPS y mantenga un valor de recuperación alto. Prueba con diferentes valores de scann.num_leaves_to_search sin volver a compilar el índice.
  5. Repite el paso 4 hasta que tanto las consultas por segundo como el intervalo de retención alcancen valores aceptables.

Índice de árbol de tres niveles

Además de las recomendaciones para el índice de árbol de dos niveles ScaNN, sigue estas directrices.

Para aplicar recomendaciones y encontrar el valor óptimo de los parámetros de índice num_leaves y max_num_levels, sigue estos pasos:

  1. Crea el índice ScaNN con las siguientes combinaciones de num_leaves y max_num_levels en función de tus objetivos de rendimiento:

    • Tiempo de compilación y calidad del índice de equilibrio: define max_num_levels como 2 y num_leaves como power(rows, ⅔).
    • Optimizar para conseguir calidad: defina max_num_levels como 2 y num_leaves como rows/100.
  2. Ejecuta tus consultas de prueba. Para obtener más información sobre cómo analizar las consultas, consulta el artículo Analizar las consultas.

  3. Anota la proporción entre scann.num_leaves_to_search y num_leaves que se usará en los pasos siguientes. Esta proporción proporciona una aproximación del conjunto de datos que le ayudará a alcanzar su objetivo de recuerdo.

Si trabajas con vectores de alta dimensión (500 dimensiones o más) y quieres mejorar la recuperación, prueba a ajustar el valor de scann.pre_reordering_num_neighbors. El valor predeterminado es 500 * K, donde K es el límite que has definido en la consulta.

  1. Si tu QPS es demasiado bajo después de que tus consultas alcancen un recall objetivo, sigue estos pasos:

    • Vuelve a crear el índice, aumentando los valores de num_leaves y scann.num_leaves_to_search según las siguientes directrices:
    • Asigna a num_leaves un factor mayor de power(rows, ⅔). Por ejemplo, si el índice tiene num_leaves definido en power(rows, ⅔), prueba a duplicar power(rows, ⅔). Si el valor ya es el doble, prueba a fijarlo en el triple de power(rows, ⅔).
    • Aumenta scann.num_leaves_to_search según sea necesario para mantener su proporción con num_leaves, que has indicado en el paso 3.
    • Asigna a num_leaves un valor igual o inferior a rows/100.
    • Vuelve a ejecutar las consultas de prueba. Mientras ejecutas las consultas de prueba, experimenta con la reducción de scann.num_leaves_to_search para encontrar un valor que aumente las CPS y mantenga un valor de recuperación alto. Prueba con distintos valores de scann.num_leaves_to_search sin volver a compilar el índice.
  2. Repite el paso 4 hasta que tanto las consultas por segundo como el intervalo de retención alcancen valores aceptables.

Mantenimiento de índices

Si su tabla se actualiza o se insertan datos con frecuencia, le recomendamos que vuelva a indexar periódicamente el índice ScaNN para mejorar la precisión de la recuperación. Puedes 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 Métricas de índice de Vector.

Siguientes pasos