Delen via


Diskann-extensie inschakelen en gebruiken voor Azure Database for PostgreSQL - Flexible Server (preview)

DiskANN is een schaalbaar, bij benadering dichtstbijzijnde zoekalgoritmen voor efficiënte vectorzoekopdrachten op elke schaal. Het biedt hoge relevante overeenkomsten, hoge query's per seconde (QPS) en lage querylatentie, zelfs voor gegevenssets met miljarden punten. Dit maakt het een krachtig hulpprogramma voor het verwerken van grote hoeveelheden gegevens. Meer informatie over DiskANN van Microsoft

De pg_diskann extensie voor Azure Database for PostgreSQL flexibele server voegt ondersteuning toe voor het gebruik van de DiskANN voor efficiënte vectorindexering en -zoekopdrachten.

Inschrijven bij de pg_diskann preview-functie

pg_diskann Voor Azure Database for PostgreSQL - Flexible Server moeten gebruikers zich registreren via ons preview-formulier. Volg de onderstaande stappen om u te registreren:

  1. Het voorbeeldformulier openen
  2. Vul alle relevante gegevens in. We hebben uw Azure-abonnements-id nodig voor inschakeling.

Notitie

Nadat u het voorbeeldformulier hebt ingevuld, duurt het enige tijd voordat uw aanvraag is goedgekeurd. Bevestiging wordt verzonden naar uw e-mail.

Extensie inschakelen pg_diskann

Voordat u het exemplaar van uw flexibele Azure Database for PostgreSQL-server kunt inschakelen pg_diskann , moet u deze toevoegen aan uw acceptatielijst, zoals wordt beschreven in het gebruik van PostgreSQL-extensies en controleert u of deze correct is toegevoegd door uit te voeren SHOW azure.extensions;.

Schermopname van het selecteren van pg_diskann in serverparameters.

Belangrijk

Deze preview-functie is alleen beschikbaar voor nieuw geïmplementeerde Exemplaren van Azure Database for PostgreSQL Flexible Server.

Vervolgens kunt u de extensie installeren door verbinding te maken met uw doeldatabase en de opdracht CREATE EXTENSION uit te voeren. U moet de opdracht afzonderlijk herhalen voor elke database waarin u wilt dat de extensie beschikbaar is.

CREATE EXTENSION IF NOT EXISTS pg_diskann CASCADE;

Met deze opdracht wordt pgvector ingeschakeld als deze nog niet is geïnstalleerd in uw PostgreSQL-database.

Notitie

Als u de extensie wilt verwijderen uit het momenteel verbonden databasegebruik DROP EXTENSION vector;.

Methode voor indextoegang gebruiken diskann

Zodra de extensie is geïnstalleerd, kunt u een diskann index maken op een tabelkolom die vectorgegevens bevat. Als u bijvoorbeeld een index wilt maken in de embedding kolom van de my_table tabel, gebruikt u de volgende opdracht:

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)

Indexopties

Wanneer u een index maakt, diskannkunt u verschillende parameters opgeven om het gedrag ervan te bepalen. Dit zijn de opties die we momenteel hebben:

  • max_neighbors: Maximum aantal randen per knooppunt in de grafiek. (Standaard ingesteld op 32)
  • l_value_ib: De grootte van de zoeklijst tijdens de indexbuild (standaard ingesteld op 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
 );

De L-waarde voor indexscans (l_value_is) kan worden ingesteld voor de hele verbinding of per transactie (met behulp van SET LOCAL binnen een transactieblok):

SET diskann.l_value_is = 100;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- uses 100 candidates

Postgres bepaalt automatisch wanneer de DiskANN-index moet worden gebruikt. Als er scenario's zijn die u altijd wilt gebruiken, gebruikt u de volgende opdracht:

SET LOCAL enable_seqscan TO OFF;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- forces the use of index

Voortgang van indexeren

Met PostgreSQL 12 en hoger kunt u de pg_stat_progress_create_index voortgang van de indexering controleren.

SELECT phase, round(100.0 * blocks_done / nullif(blocks_total, 0), 1) AS "%" FROM pg_stat_progress_create_index;

Fasen voor het bouwen van DiskANN-indexen zijn:

  1. initializing
  2. loading tuples

Waarschuwing

In sommige gevallen kunnen gebruikers trage buildtijden van indexen ervaren.

De functie voor indextoegang selecteren

Met het vectortype kunt u drie typen zoekopdrachten uitvoeren op de opgeslagen vectoren. U moet de juiste toegangsfunctie voor uw index selecteren, zodat de database uw index kan overwegen bij het uitvoeren van uw query's.

pg_diskann ondersteunt de volgende afstandsoperatoren

  • vector_l2_ops: <-> Euclidische afstand
  • vector_cosine_ops: <=> Cosinusafstand
  • vector_ip_ops: <#> Inner Product