Compreenda a filtragem adaptável na IA do AlloyDB

Esta página oferece uma vista geral conceptual da filtragem adaptativa na IA do AlloyDB, uma funcionalidade concebida para otimizar as pesquisas de vetores filtradas.

O que é a filtragem adaptável?

A filtragem adaptativa analisa os padrões de consultas e as distribuições de dados durante a execução de consultas para escolher dinamicamente a estratégia de filtragem mais eficiente, como a filtragem prévia ou inline.

O otimizador de consultas da IA do AlloyDB usa a análise baseada em custos para determinar se a filtragem inline ou a pré-filtragem oferece o melhor desempenho em qualquer ponto durante a execução da consulta.

Este tipo de otimização suporta as pesquisas vetoriais filtradas da IA do AlloyDB, em que a filtragem adaptativa alterna automaticamente entre a utilização do índice de vetores e de metadados, o que produz resultados eficientes e precisos sem intervenção manual.

Alternância dinâmica entre estratégias de filtragem

A filtragem adaptativa alterna automaticamente e de forma dinâmica entre a filtragem inline e as estratégias de pré-filtragem durante a execução de consultas com base em padrões de consulta e distribuições de dados em tempo real. O otimizador de consultas da IA do AlloyDB usa a análise baseada em custos para determinar que estratégia oferece o melhor desempenho em qualquer ponto específico.

De inline para pré-filtragem

Quando o otimizador determina que a pré-filtragem é mais eficiente, a filtragem adaptativa aciona uma mudança da filtragem inline para a pré-filtragem durante a execução. O plano de consulta muda dinamicamente para refletir esta alteração.

Por exemplo, o plano pode mostrar Bitmap assisted pre-filtering no campo Estratégia de execução quando o otimizador determina que a pré-filtragem é mais eficiente nesse ponto da consulta. Esta alteração dinâmica ocorre à medida que o sistema se adapta aos dados reais que encontra durante a execução da 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)

Quando usa Execution Strategy: Bitmap assisted pre-filtering, um Bitmap Index Scan separado filtra primeiro um grande conjunto de dados. Se esta pré-filtragem reduzir eficazmente os candidatos, o índice de vetores não é usado para a pesquisa de semelhança de vetores final.

Da pré-filtragem à filtragem inline

A filtragem adaptativa também pode mudar dinamicamente da pré-filtragem para a filtragem inline se o otimizador de consultas do AlloyDB AI determinar que a filtragem inline é mais eficiente para as caraterísticas da consulta atual.

Nestes casos, o plano de consulta ajusta-se dinamicamente para refletir um processamento mais direto dos dados vetoriais sem uma etapa de pré-filtragem explícita que anteceda a análise vetorial. Esta adaptabilidade ajuda a alcançar um desempenho ideal à medida que as distribuições de dados ou os parâmetros de consulta mudam durante a execução.

Por exemplo, o plano de consulta mostra vector scan no campo Estratégia de execução quando o otimizador determina que uma estratégia de filtragem inline é mais eficiente para a consulta especificada.

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)

Neste exemplo, o elemento Execution Strategy mostra Bitmap assisted vector Scan on scann_idx, com um elemento Bitmap Index Scan subjacente em btree_idx. Isto indica que a pesquisa vetorial usa um filtro de mapa de bits, que a análise do índice de mapa de bits gera com base na condição int_col <= 100000000. Em seguida, o Custom Scan (vector scan) processa apenas as linhas identificadas por este mapa de bits, integrando a filtragem diretamente no processo de análise vetorial.

O que se segue?