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:
- Het voorbeeldformulier openen
- 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;
.
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, diskann
kunt 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:
initializing
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 afstandvector_cosine_ops
:<=>
Cosinusafstandvector_ip_ops
:<#>
Inner Product