Så här aktiverar och använder du diskann-tillägget för Azure Database for PostgreSQL – flexibel server (förhandsversion)
DiskANN är en skalbar ungefärlig algoritm för närmaste grannsökning för effektiv vektorsökning i valfri skala. Den erbjuder hög träffsäkerhet, höga frågor per sekund (QPS) och låg frågesvarstid, även för miljardpunktsdatauppsättningar. Detta gör det till ett kraftfullt verktyg för hantering av stora mängder data. Läs mer om DiskANN från Microsoft
Tillägget pg_diskann
för Azure Database for PostgreSQL – flexibel server ger stöd för att använda DiskANN för effektiv vektorindexering och sökning.
Registrera dig i förhandsversionsfunktionen pg_diskann
pg_diskann
för Azure Database for PostgreSQL – Flexibel server kräver att användarna registrerar sig via vårt förhandsversionsformulär. Följ stegen nedan för att registrera dig:
- Öppna förhandsgranskningsformuläret
- Fyll i all relevant information. Vi behöver ditt Azure-prenumerations-ID för aktivering.
Kommentar
När du har fyllt i förhandsgranskningsformuläret tar det lite tid innan din begäran godkänns. Bekräftelse skickas till din e-post.
Aktivera pg_diskann
tillägg
Innan du kan aktivera pg_diskann
på din flexibla Azure Database for PostgreSQL-serverinstans måste du lägga till den i listan med tillåtna värden enligt beskrivningen i hur du använder PostgreSQL-tillägg och kontrollera om det har lagts till korrekt genom att köra SHOW azure.extensions;
.
Viktigt!
Den här förhandsgranskningsfunktionen är endast tillgänglig för nyligen distribuerade Azure Database for PostgreSQL– flexibla serverinstanser.
Sedan kan du installera tillägget genom att ansluta till måldatabasen och köra kommandot CREATE EXTENSION . Du måste upprepa kommandot separat för varje databas där du vill att tillägget ska vara tillgängligt.
CREATE EXTENSION IF NOT EXISTS pg_diskann CASCADE;
Det här kommandot aktiverar pgvector
om det inte redan har installerats i PostgreSQL-databasen.
Kommentar
Om du vill ta bort tillägget från den anslutna databasen använder du DROP EXTENSION vector;
.
Använda diskann
indexåtkomstmetod
När tillägget har installerats kan du skapa ett diskann
index i en tabellkolumn som innehåller vektordata. Om du till exempel vill skapa ett index i embedding
kolumnen i my_table
tabellen använder du följande kommando:
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)
Indexalternativ
När du skapar ett index med diskann
kan du ange olika parametrar för att styra dess beteende. Här är de alternativ som vi för närvarande har:
max_neighbors
: Maximalt antal kanter per nod i diagrammet. (Standardvärdet är 32)l_value_ib
: Söklistans storlek under indexet (standardvärdet är 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
);
L-värdet för indexgenomsökning (l_value_is
) kan anges för hela anslutningen eller per transaktion (med hjälp av SET LOCAL
ett transaktionsblock):
SET diskann.l_value_is = 100;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- uses 100 candidates
Postgres bestämmer automatiskt när diskANN-index ska användas. Om det finns scenarier som du alltid vill använda indexet använder du följande kommando:
SET LOCAL enable_seqscan TO OFF;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- forces the use of index
Indexeringsstatus
Med PostgreSQL 12 och senare kan du använda pg_stat_progress_create_index
för att kontrollera indexeringsförloppet.
SELECT phase, round(100.0 * blocks_done / nullif(blocks_total, 0), 1) AS "%" FROM pg_stat_progress_create_index;
Faser för att skapa DiskANN-index är:
initializing
loading tuples
Varning
Användare kan uppleva långsamma indexgenereringstider i vissa fall.
Välja funktionen för indexåtkomst
Med vektortypen kan du utföra tre typer av sökningar på de lagrade vektorerna. Du måste välja rätt åtkomstfunktion för ditt index så att databasen kan överväga ditt index när du kör dina frågor.
pg_diskann
stöder följande avståndsoperatorer
vector_l2_ops
:<->
Euklidiska avståndvector_cosine_ops
:<=>
Cosinnavståndvector_ip_ops
:<#>
Inre produkt