Aktivieren und Verwenden der DiskANN-Erweiterung für Azure Database for PostgreSQL – Flexible Server (Vorschau)
DiskANN ist ein skalierbarer Pixelwiederholung-Suchalgorithmus für eine effiziente Vektorsuche in beliebiger Größenordnung. Es bietet hohen Recall, hohe Abfragen pro Sekunde (QPS) und niedrige Abfragelatenz, auch für Datasets mit Milliarden Punkten. Dies macht es zu einem leistungsstarken Tool für die Verarbeitung großer Datenmengen. Weitere Informationen zu DiskANN von Microsoft
Die pg_diskann
-Erweiterung für Azure Database for PostgreSQL – Flexible Server bietet Unterstützung für die Verwendung von DiskANN für effiziente Vektorindizierung und -suche.
Registrieren für die pg_diskann
-Previewfunktion
pg_diskann
für Azure Database for PostgreSQL – Flexible Server erfordert, dass sich Benutzer über unser Vorschauformular registrieren. Führen Sie die folgenden Schritte aus, um sich zu registrieren:
- Öffnen Sie das Vorschauformular.
- Füllen Sie alle relevanten Details aus. Wir benötigen Ihre Azure-Abonnement-ID für die Aktivierung.
Hinweis
Nachdem Sie das Vorschauformular ausgefüllt haben, dauert es einige Zeit, bis Ihre Anforderung genehmigt wurde. Die Bestätigung wird an Ihre E-Mail gesendet.
Aktivieren der Erweiterung pg_diskann
Bevor Sie pg_diskann
auf Ihrer flexiblen Serverinstanz von Azure Database for PostgreSQL aktivieren können, müssen Sie den Dienst, wie in der Anleitung zur Verwendung von PostgreSQL-Erweiterungen beschrieben, Ihrer Positivliste hinzufügen und überprüfen, ob er korrekt hinzugefügt wurde, indem Sie SHOW azure.extensions;
ausführen.
Wichtig
Diese Previewfunktion ist auch nur für neu bereitgestellte Flexible Server-Instanzen von Azure Database for PostgreSQL verfügbar.
Anschließend können Sie die Erweiterung installieren, indem Sie eine Verbindung mit Ihrer Zieldatenbank herstellen und den Befehl CREATE EXTENSION ausführen. Sie müssen den Befehl separat für jede Datenbank wiederholen, in der die Erweiterung verfügbar sein soll.
CREATE EXTENSION IF NOT EXISTS pg_diskann CASCADE;
Dieser Befehl aktiviert pgvector
, wenn er noch nicht in Ihrer PostgreSQL-Datenbank installiert wurde.
Hinweis
Um die Erweiterung aus der derzeit verbundenen Datenbank zu entfernen, verwenden Sie DROP EXTENSION vector;
.
Verwenden der Indexzugriffsmethode diskann
Nachdem die Erweiterung installiert wurde, können Sie einen diskann
-Index für eine Tabellenspalte erstellen, die Vektordaten enthält. Wenn Sie beispielsweise einen Index für die embedding
-Spalte der my_table
-Tabelle erstellen möchten, verwenden Sie den folgenden Befehl:
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)
Indexoptionen
Beim Erstellen eines Indexes mit diskann
können Sie verschiedene Parameter angeben, um das Verhalten zu steuern. Nachfolgend sind die Optionen aufgeführt, die derzeit unterstützt werden:
max_neighbors
: Maximale Anzahl von Kanten pro Knoten im Diagramm (Standardwert ist 32)l_value_ib
: Die Größe der Suchliste während des Indexbuilds (Standardwert ist 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
);
Der L-Wert für die Indexüberprüfung (l_value_is
) kann für die gesamte Verbindung oder pro Transaktion festgelegt werden (mit SET LOCAL
innerhalb eines Transaktionsblocks):
SET diskann.l_value_is = 100;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- uses 100 candidates
Postgres entscheidet automatisch, wann der DiskANN-Index verwendet werden soll. Wenn es Szenarios gibt, in denen Sie den Index immer verwenden möchten, verwenden Sie den folgenden Befehl:
SET LOCAL enable_seqscan TO OFF;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- forces the use of index
Indizierungsfortschritt
Mit PostgreSQL 12 und höher können Sie pg_stat_progress_create_index
verwenden, um den Indizierungsfortschritt zu überprüfen.
SELECT phase, round(100.0 * blocks_done / nullif(blocks_total, 0), 1) AS "%" FROM pg_stat_progress_create_index;
Die Phasen zum Erstellen von DiskANN-Indizes sind:
initializing
loading tuples
Warnung
Benutzer können in einigen Fällen langsame Indexbuildzeiten erleben.
Auswählen der Indexzugriffsfunktion
Mit dem Vektortyp können Sie drei Arten von Suchen für die gespeicherten Vektoren durchführen. Sie müssen die richtige Zugriffsfunktion für Ihren Index auswählen, damit die Datenbank Ihren Index bei der Ausführung Ihrer Abfragen berücksichtigen kann.
pg_diskann
unterstützt die folgenden Entfernungsoperatoren:
vector_l2_ops
:<->
Euklidischer Abstandvector_cosine_ops
:<=>
Kosinusabstandvector_ip_ops
:<#>
Inneres Produkt