Você pode usar o mecanismo colunar do AlloyDB para PostgreSQL para acelerar suas pesquisas de vetor ao usar o índice Scalable Nearest Neighbors (ScaNN) ou Hierarchical Navigable Small World (HNSW). O mecanismo colunar funciona como um cache na memória otimizado para leitura desses índices de vetor.
O armazenamento em cache dos índices no mecanismo colunar atende às consultas diretamente de uma representação do índice na memória otimizada para leitura e aumenta o número de consultas por segundo (QPS) que seu banco de dados pode processar para cargas de trabalho de pesquisa vetorial.
Só é possível usar o HNSW com o mecanismo colunar para clusters do AlloyDB que executam o PostgreSQL 17 ou versões mais recentes. O ScaNN com mecanismo colunar não tem essa limitação.
Antes de começar
Defina as flags de banco de dados
google_columnar_engine.enabledegoogle_columnar_engine.enable_index_cachingcomoonpara ativar o mecanismo colunar e o recurso de cache de índice.gcloud alloydb instances update INSTANCE_ID \ --database-flags google_columnar_engine.enabled=on,google_columnar_engine.enable_index_caching=on \ --region=REGION \ --cluster=CLUSTER_ID \ --project=PROJECT_IDSubstitua:
INSTANCE_ID: o ID da instância em que você quer ativar o mecanismo colunar.REGION: a região em que a instância está localizada, por exemplo,us-central1.CLUSTER_ID: o ID do cluster em que a instância está localizada.PROJECT_ID: o ID do projeto em que o cluster está localizado.
Para mais informações sobre como definir flags, consulte Configurar flags do banco de dados.
Crie um índice ScaNN ou um índice HNSW no seu banco de dados.
Adicionar um índice ao mecanismo colunar
Depois de ativar o mecanismo colunar, é possível adicionar um índice à
cache usando a função SQL google_columnar_engine_add_index().
Para adicionar um índice ao mecanismo colunar, siga estas etapas:
No Google Cloud console, acesse a página Clusters.
Para mostrar a página Visão geral do cluster, clique no nome do cluster do AlloyDB na coluna Nome do recurso.
No painel de navegação, clique em AlloyDB Studio.
Faça login no AlloyDB Studio usando o nome do banco de dados, o nome de usuário e a senha.
Na guia Editor 1, insira a seguinte consulta:
SELECT google_columnar_engine_add_index('INDEX_NAME');Substitua
INDEX_NAMEpelo nome do seu índice de vetores.- Clique em Executar.
Depois de adicionar um índice ao mecanismo colunar, todas as consultas que usam esse
índice são aceleradas automaticamente pelo mecanismo colunar. Para verificar se as consultas de vetor estão sendo aceleradas pelo mecanismo colunar, use o plano EXPLAIN (ANALYZE, COLUMNAR_ENGINE) na consulta.
Verificar o uso do cache
Para verificar se as consultas de vetor estão sendo aceleradas pelo mecanismo colunar, use o plano EXPLAIN (ANALYZE, COLUMNAR_ENGINE) na consulta.
Exemplo de plano de execução do ScaNN
Confira a seguir um exemplo de plano de execução para uma consulta que usa um índice ScaNN adicionado ao mecanismo colunar:
EXPLAIN (ANALYZE TRUE, SCANN TRUE, COSTS FALSE, TIMING FALSE, SUMMARY FALSE, VERBOSE FALSE, COLUMNAR_ENGINE TRUE)
SELECT * FROM t ORDER BY val <=> '[0.5,0.5,0.5,0.5]' LIMIT 100;
--This contains details about ScaNN's usage from the columnar engine. Example:
------------------------------------------------------------------------------------------------------
Index Scan using scann_idx on t t_1 (actual rows=100 loops=1)
Order By: (val <=> '[0.5,0.5,0.5,0.5]'::vector)
Limit: 100
ScaNN Info: (... columnar engine nodes hit=6...)
Columnar Engine ScaNN Info: (index found=true)
(5 rows)
A presença de columnar engine nodes hit e Columnar Engine ScaNN Info:
(index found=true) na saída confirma que o mecanismo colunar é usado para a consulta.
Exemplo de plano de execução do HNSW
O plano de execução mostra a seção Informações do HNSW do mecanismo colunar para o índice respectivo, que mostra métricas como a proporção de elementos recuperados do mecanismo colunar (elements_from_ce) e do disco (elements_from_disk).
Confira um exemplo de plano de execução para uma consulta que usa um índice HNSW adicionado ao mecanismo colunar:
EXPLAIN (ANALYZE, COLUMNAR_ENGINE) SELECT * FROM documents ORDER BY embedding <=> '[0.1, 0.2, 0.3, 0.4, 0.5]'::vector LIMIT 5;
--This contains details about HNSW's usage from the columnar engine. Example:
------------------------------------------------------------------------------------------------------
Limit (actual rows=5 loops=1)
-> Index Scan using hnsw_idx on documents (actual rows=5 loops=1)
Order By: (embedding '[0.1, 0.2, 0.3, 0.4, 0.5]'::vector)
Columnar Engine HNSW Info: (index found=true elements_from_ce=385 elements_from_disk=0)
Columnar Check: table is not in the columnar store
(5 rows)
A resposta mostra que o índice está sendo acelerado pelo mecanismo colunar, já que todos os elementos foram extraídos do mecanismo colunar (elements_from_ce=385) e nenhum foi extraído do disco (elements_from_disk=0).
Quando modificações de dados, como instruções INSERT, UPDATE ou DELETE, invalidam entradas de cache, o mecanismo colunar usa uma abordagem híbrida para manter a precisão e o desempenho. Ele lê vetores válidos e armazenados em cache diretamente da memória e
busca apenas os vetores modificados ou novos do disco.
Se você modificar uma grande quantidade de dados, poderá notar um aumento temporário em "elements_from_disk" e uma queda no desempenho até que o cache seja atualizado.
Gerenciar o índice em cache
Para gerenciar o ciclo de vida dos seus índices em cache, siga estas etapas:
No Google Cloud console, acesse a página Clusters.
Para mostrar a página Visão geral do cluster, clique no nome do cluster do AlloyDB na coluna Nome do recurso.
No painel de navegação, clique em AlloyDB Studio.
Faça login no AlloyDB Studio usando o nome do banco de dados, o nome de usuário e a senha.
Na guia Editor 1, insira o comando SQL da tarefa selecionada:
Para atualizar o cache manualmente, execute o seguinte comando:
SELECT google_columnar_engine_refresh_index('INDEX_NAME');Para verificar o status do índice, execute o seguinte comando:
SELECT google_columnar_engine_verify('INDEX_NAME');Para remover o índice do cache, execute o seguinte comando:
SELECT google_columnar_engine_drop_index('INDEX_NAME');Para ver os índices ativos, execute o seguinte comando:
SELECT * FROM g_columnar_indexes;Para ver os índices particionados, execute o seguinte comando:
SELECT * FROM g_columnar_index_partitions;
Substitua
INDEX_NAMEpelo nome do seu índice.Clique em Executar.
Limitações
A atualização dos índices HNSW acelerados do mecanismo colunar pode consumir temporariamente até duas vezes o tamanho do índice.
A seguir
- Criar um índice HNSW
- Criar um índice do ScaNN
- Visão geral do mecanismo colunar
- Gerenciar índices do ScaNN no mecanismo colunar
- Fazer uma pesquisa vetorial