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:
- Abrir o formulário de versão prévia
- 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;
.
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:
initializing
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 euclidianavector_cosine_ops
:<=>
Distância do cossenovector_ip_ops
:<#>
Produto Interno