Información sobre el filtrado adaptativo en AlloyDB AI

En esta página se ofrece información conceptual sobre el filtrado adaptativo en AlloyDB AI, una función diseñada para optimizar las búsquedas de vectores filtradas.

¿Qué es el filtrado adaptativo?

El filtrado adaptativo analiza los patrones de consulta y las distribuciones de datos durante la ejecución de la consulta para elegir dinámicamente la estrategia de filtrado más eficiente, como el filtrado en línea o el prefiltrado.

El optimizador de consultas de IA de AlloyDB usa el análisis basado en costes para determinar si el filtrado insertado o el prefiltrado proporcionan el mejor rendimiento en un momento dado durante la ejecución de la consulta.

Este tipo de optimización admite las búsquedas de vectores filtradas de AlloyDB AI, en las que el filtrado adaptativo cambia automáticamente entre el uso de índices de vectores y de metadatos, lo que produce resultados eficientes y precisos sin intervención manual.

Cambio dinámico entre estrategias de filtrado

El filtrado adaptativo cambia de forma automática y dinámica entre las estrategias de filtrado insertado y prefiltrado durante la ejecución de las consultas en función de los patrones de consulta y las distribuciones de datos en tiempo real. El optimizador de consultas de IA de AlloyDB usa un análisis basado en costes para determinar qué estrategia ofrece el mejor rendimiento en un momento dado.

De la inserción en línea al prefiltrado

Cuando el optimizador determina que el prefiltrado es más eficiente, el filtrado adaptativo activa un cambio del filtrado insertado al prefiltrado durante la ejecución. El plan de consulta cambia de forma dinámica para reflejarlo.

Por ejemplo, el plan puede mostrar Bitmap assisted pre-filtering en el campo Estrategia de ejecución cuando el optimizador determina que el prefiltrado es más eficiente en ese punto de la consulta. Este cambio dinámico se produce a medida que el sistema se adapta a los datos reales que encuentra durante la ejecución de la consulta.

Limit (actual rows=10 loops=1)
  ->  Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
        Execution Strategy: Bitmap assisted pre-filtering
        Order By: (vec_col <=> '[...]'::vector)
        Limit: 10
        ->  Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
              Index Cond: (int_col <= 100000000)

Cuando se usa Execution Strategy: Bitmap assisted pre-filtering, un Bitmap Index Scan independiente filtra primero un conjunto de datos grande. Si este prefiltrado reduce de forma eficaz el número de candidatos, el índice vectorial no se utiliza en la búsqueda final de similitud vectorial.

Desde el prefiltrado hasta el filtrado insertado

El filtrado adaptativo también puede cambiar de forma dinámica del prefiltrado al filtrado insertado si el optimizador de consultas de AlloyDB AI determina que el filtrado insertado es más eficiente para las características de la consulta actual.

En estos casos, el plan de consulta se ajusta de forma dinámica para reflejar un procesamiento más directo de los datos vectoriales sin un paso de prefiltrado explícito anterior al análisis vectorial. Esta adaptabilidad ayuda a conseguir un rendimiento óptimo a medida que cambian las distribuciones de datos o los parámetros de las consultas durante el tiempo de ejecución.

Por ejemplo, el plan de consulta muestra vector scan en el campo Estrategia de ejecución cuando el optimizador determina que una estrategia de filtrado insertada es más eficiente para la consulta dada.

Limit (actual rows=10 loops=1)
  ->  Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
        Execution Strategy: Bitmap assisted vector Scan on scann_idx
        Order By: (vec_col <=> '[...]'::vector)
        Limit: 10
        Num Requalifications: 0
        Num filtered: 1000
        ->  Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
              Index Cond: (int_col <= 100000000)

En este ejemplo, Execution Strategy muestra Bitmap assisted vector Scan on scann_idx, con un Bitmap Index Scan subyacente en btree_idx. Esto indica que la búsqueda de vectores usa un filtro de mapa de bits, que el análisis de índice de mapa de bits genera en función de la condición int_col <= 100000000. A continuación, Custom Scan (vector scan) solo procesa las filas identificadas por este mapa de bits, integrando el filtrado directamente en el proceso de análisis vectorial.

Siguientes pasos