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.