Dela via


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:

  1. Öppna förhandsgranskningsformuläret
  2. 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;.

Skärmbild av att välja pg_diskann i serverparametrar.

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

  1. initializing
  2. 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ånd
  • vector_cosine_ops: <=> Cosinnavstånd
  • vector_ip_ops: <#> Inre produkt