Compartilhar via


Como habilitar e usar a extensão DiskANN para o Banco de Dados do Azure para PostgreSQL – Servidor Flexível (versão prévia)

O DiskANN é um algoritmo de pesquisa de vizinho aproximado escalonável para busca em vetores eficiente em qualquer escala. Ele oferece alta recuperação, consultas por segundo (QPS) altas 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 extensão pg_diskann do servidor flexível do Banco de Dados do Azure para PostgreSQL adiciona suporte ao uso do DiskANN para indexação e pesquisa de vetores eficientes.

Registrar-se na versão prévia do recurso pg_diskann

pg_diskann para o Banco de Dados do Azure para PostgreSQL – Servidor Flexível requer que os usuários se inscrevam por meio de nosso formulário de versão prévia. Siga as etapas abaixo para se inscrever:

  1. Abrir o formulário de versão prévia
  2. Preencha todos os detalhes relevantes. Precisaremos da sua ID da assinatura do Azure para habilitação.

Observação

Depois de preencher o formulário de versão prévia, levará algum tempo para que a sua solicitação seja aprovada. A confirmação será enviada para o seu email.

Habilitar a extensão pg_diskann

Antes de habilitar a pg_diskann na sua instância de servidor flexível do Banco de Dados do Azure para PostgreSQL, você precisa adicioná-la à lista de permissões, conforme descrito em Como usar extensões do PostgreSQL, e verificar se ela foi adicionada corretamente executando SHOW azure.extensions;.

Captura de tela da seleção de pg_diskann em parâmetros de servidor.

Importante

Esta versão prévia do recurso 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. É necessário repetir o comando separadamente para cada banco de dados no qual você deseja que a extensão esteja disponível.

CREATE EXTENSION IF NOT EXISTS pg_diskann CASCADE;

Este comando habilita pgvector se ele ainda não tiver sido instalado no banco de dados PostgreSQL.

Observação

Para remover a extensão do banco de dados conectado no momento, use DROP EXTENSION vector;.

Usando o Método de Acesso de Índice diskann

Depois que a extensão for instalada, você poderá criar um índice diskann em uma coluna de tabela que contenha dados de vetor. Por exemplo, para criar um índice na coluna embedding da tabela my_table, 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, você pode especificar vários parâmetros para controlar o seu comportamento. Estas são as opções que temos atualmente:

  • max_neighbors: número máximo de bordas por nó no grafo. (O padrão é 32)
  • l_value_ib: o tamanho da lista de pesquisa durante o build de índice (o 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 verificação 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 nos quais você sempre deseje 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 ou posterior, 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 passar por tempos de build de índice lentos em alguns casos.

Seleção da função de acesso ao índice

O tipo de vetor permite que você execute três tipos de pesquisas nos vetores armazenados. Você precisa selecionar a função de acesso correta para o índice para que o banco de dados possa considerar o seu índice ao executar as suas consultas.

pg_diskann dá suporte aos operadores de distância a seguir

  • vector_l2_ops: <-> Distância euclidiana
  • vector_cosine_ops: <=> Distância do cosseno
  • vector_ip_ops: <#> Produto Interno