Partilhar via


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:

  1. Abrir o formulário de pré-visualização
  2. 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 .

Captura de tela mostrando a seleção de pg_diskann nos parâmetros do servidor.

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 diskanno , 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:

  1. initializing
  2. 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 euclidiana
  • vector_cosine_ops: <=> Distância cossina
  • vector_ip_ops: <#> Produto interno