Condividi tramite


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_diskannper 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:

  1. Aprire il modulo di anteprima
  2. 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;.

Screenshot della selezione di pg_diskann nei parametri del server.

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:

  1. initializing
  2. 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 euclidea
  • vector_cosine_ops: <=> distanza coseno
  • vector_ip_ops: <#> prodotto interno