Como habilitar e usar a extensão diskann para o Banco de Dados do Azure para PostgreSQL - Servidor Flexível (Visualização)
O DiskANN é um algoritmo de pesquisa de vizinho mais próximo escalável e escalável para uma pesquisa vetorial eficiente em qualquer escala. Ele oferece alta recuperação, altas consultas por segundo (QPS) e baixa latência de consulta, mesmo para conjuntos de dados de bilhões de pontos. Isso o torna uma ferramenta poderosa para lidar com grandes volumes de dados. Saiba mais sobre o DiskANN da Microsoft
A pg_diskann
extensão do Banco de Dados do Azure para servidor flexível PostgreSQL adiciona suporte ao uso do DiskANN para indexação e pesquisa vetoriais eficientes.
Inscrever-se no pg_diskann
recurso de visualização
pg_diskann
para o Banco de Dados do Azure para PostgreSQL - O Servidor Flexível exige que os usuários se inscrevam por meio do nosso formulário de Visualização. Siga os passos abaixo para se inscrever:
- Abrir o formulário de pré-visualização
- Preencha todos os detalhes relevantes. Precisaremos da sua ID de assinatura do Azure para habilitação.
Nota
Depois de preencher o formulário de pré-visualização, levará algum tempo até que o seu pedido seja aprovado. A confirmação será enviada para o seu e-mail.
Ativar pg_diskann
extensão
Antes de habilitar em seu Banco de Dados do Azure para instância de servidor flexível do PostgreSQL, você precisa adicioná-lo pg_diskann
à sua lista de permissões, conforme descrito em como usar extensões do PostgreSQL, e verificar se foi adicionado corretamente executando SHOW azure.extensions;
o .
Importante
Esse recurso de visualização só está disponível para instâncias do Servidor Flexível do Banco de Dados do Azure para PostgreSQL recém-implantadas.
Em seguida, você pode instalar a extensão conectando-se ao banco de dados de destino e executando o comando CREATE EXTENSION . Você precisa repetir o comando separadamente para cada banco de dados no qual deseja que a extensão esteja disponível.
CREATE EXTENSION IF NOT EXISTS pg_diskann CASCADE;
Este comando habilita pgvector
se ainda não tiver sido instalado em seu banco de dados PostgreSQL.
Nota
Para remover a extensão do banco de dados conectado no momento, use DROP EXTENSION vector;
.
Usando o diskann
método de acesso ao índice
Depois que a extensão estiver instalada, você poderá criar um diskann
índice em uma coluna de tabela que contenha dados vetoriais. Por exemplo, para criar um índice na embedding
coluna da my_table
tabela, use o seguinte comando:
CREATE TABLE my_table (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
embedding public.vector(3)
-- other columns
);
-- insert dummy data
INSERT INTO my_table (embedding) VALUES
('[1.0, 2.0, 3.0]'),
('[4.0, 5.0, 6.0]'),
('[7.0, 8.0, 9.0]');
-- create a diskann index by using Cosine distance operator
CREATE INDEX my_table_embedding_diskann_idx ON my_table USING diskann (embedding vector_cosine_ops)
Opções de índice
Ao criar um índice com diskann
o , você pode especificar vários parâmetros para controlar seu comportamento. Aqui estão as opções que temos atualmente:
max_neighbors
: Número máximo de arestas por nó no gráfico. (Padrão para 32)l_value_ib
: O tamanho da lista de pesquisa durante a compilação do índice (padrão 50)
CREATE INDEX my_table_embedding_diskann_custom_idx ON my_table USING diskann (embedding vector_cosine_ops)
WITH (
max_neighbors = 48,
l_value_ib = 100
);
O valor L para varredura de índice (l_value_is
) pode ser definido para toda a conexão ou por transação (usando SET LOCAL
dentro de um bloco de transação):
SET diskann.l_value_is = 100;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- uses 100 candidates
O Postgres decidirá automaticamente quando usar o índice DiskANN. Se houver cenários que você sempre deseja usar o índice, use o seguinte comando:
SET LOCAL enable_seqscan TO OFF;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- forces the use of index
Progresso da indexação
Com o PostgreSQL 12 e versões mais recentes, você pode usar pg_stat_progress_create_index
para verificar o progresso da indexação.
SELECT phase, round(100.0 * blocks_done / nullif(blocks_total, 0), 1) AS "%" FROM pg_stat_progress_create_index;
As fases para a criação de índices DiskANN são:
initializing
loading tuples
Aviso
Os usuários podem experimentar tempos de compilação de índice lento em alguns casos.
Selecionando a função de acesso ao índice
O tipo de vetor permite realizar três tipos de pesquisas nos vetores armazenados. Você precisa selecionar a função de acesso correta para seu índice para que o banco de dados possa considerar seu índice ao executar suas consultas.
pg_diskann
suporta os seguintes operadores de distância
vector_l2_ops
:<->
Distância euclidianavector_cosine_ops
:<=>
Distância cossinavector_ip_ops
:<#>
Produto interno