Come abilitare e usare l'estensione diskann per Database di Azure per PostgreSQL - Server flessibile (anteprima)
DiskANN è un algoritmo di ricerca vicino più vicino scalabile per una ricerca vettoriale efficiente su qualsiasi scala. Offre un elevato richiamo, query elevate al secondo e bassa latenza delle query, anche per set di dati miliardi di punti. Questo lo rende uno strumento potente per la gestione di grandi volumi di dati. Altre informazioni su DiskANN da Microsoft
L'estensione pg_diskann
per Database di Azure per PostgreSQL server flessibile aggiunge il supporto per l'uso di DiskANN per l'indicizzazione e la ricerca di vettori efficienti.
Eseguire la registrazione nella pg_diskann
funzionalità di anteprima
pg_diskann
per Database di Azure per PostgreSQL : il server flessibile richiede agli utenti di iscriversi tramite il modulo di anteprima. Per effettuare la registrazione, seguire questa procedura:
- Aprire il modulo di anteprima
- Compilare tutti i dettagli pertinenti. Per l'abilitazione sarà necessario l'ID sottoscrizione di Azure.
Nota
Dopo aver compilato il modulo di anteprima, la richiesta di approvazione richiederà del tempo. La conferma verrà inviata al messaggio di posta elettronica.
Abilitare l'estensione pg_diskann
Prima di poter abilitare pg_diskann
nell'istanza del server flessibile di Database di Azure per PostgreSQL, è necessario aggiungerla all'elenco di elementi consentiti come descritto in come usare le estensioni PostgreSQL e verificare se sono state aggiunte correttamente eseguendo SHOW azure.extensions;
.
Importante
Questa funzionalità di anteprima è disponibile solo per le istanze del server flessibile Database di Azure per PostgreSQL appena distribuite.
È quindi possibile installare l'estensione connettendosi al database di destinazione ed eseguendo il comando CREATE EXTENSION . È necessario ripetere il comando separatamente per ogni database in cui si desidera che l'estensione sia disponibile.
CREATE EXTENSION IF NOT EXISTS pg_diskann CASCADE;
Questo comando abilita pgvector
se non è già stato installato nel database PostgreSQL.
Nota
Per rimuovere l'estensione dal database attualmente connesso, usare DROP EXTENSION vector;
.
Utilizzo del diskann
metodo di accesso all'indice
Dopo aver installato l'estensione, è possibile creare un diskann
indice in una colonna di tabella contenente dati vettoriali. Ad esempio, per creare un indice nella embedding
colonna della my_table
tabella, usare il comando seguente:
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)
Opzioni per indici
Quando si crea un indice con diskann
, è possibile specificare vari parametri per controllarne il comportamento. Ecco le opzioni attualmente disponibili:
max_neighbors
: numero massimo di archi per nodo nel grafico. (Il valore predefinito è 32)l_value_ib
: dimensioni dell'elenco di ricerca durante la compilazione dell'indice (il valore predefinito è 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
);
Il valore L per l'analisi dell'indice (l_value_is
) può essere impostato per l'intera connessione o per transazione (usando SET LOCAL
all'interno di un blocco di transazioni):
SET diskann.l_value_is = 100;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- uses 100 candidates
Postgres deciderà automaticamente quando usare l'indice DiskANN. Se esistono scenari in cui si vuole usare sempre l'indice, usare il comando seguente:
SET LOCAL enable_seqscan TO OFF;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- forces the use of index
Stato di indicizzazione
Con PostgreSQL 12 e versioni successive, è possibile usare pg_stat_progress_create_index
per controllare lo stato di avanzamento dell'indicizzazione.
SELECT phase, round(100.0 * blocks_done / nullif(blocks_total, 0), 1) AS "%" FROM pg_stat_progress_create_index;
Le fasi per la compilazione di indici DiskANN sono:
initializing
loading tuples
Avviso
In alcuni casi, gli utenti potrebbero riscontrare tempi di compilazione dell'indice lenti.
Selezione della funzione di accesso all'indice
Il tipo di vettore consente di eseguire tre tipi di ricerche sui vettori archiviati. È necessario selezionare la funzione di accesso corretta per l'indice in modo che il database possa considerare l'indice durante l'esecuzione delle query.
pg_diskann
supporta gli operatori di distanza seguenti
vector_l2_ops
:<->
distanza euclideavector_cosine_ops
:<=>
distanza cosenovector_ip_ops
:<#>
prodotto interno