Sdílet prostřednictvím


Povolení a používání rozšíření diskann pro flexibilní server Azure Database for PostgreSQL (Preview)

DiskANN je škálovatelný přibližný vyhledávací algoritmus nejbližšího souseda pro efektivní vektorové vyhledávání v libovolném měřítku. Nabízí vysokou úplnost, vysoké dotazy za sekundu (QPS) a nízkou latenci dotazů, a to i pro datové sady s miliardami bodů. Díky tomu je výkonný nástroj pro zpracování velkých objemů dat. Další informace o DiskANN od Microsoftu

Rozšíření pg_diskann flexibilního serveru Azure Database for PostgreSQL přidává podporu pro použití DiskANN pro efektivní indexování vektorů a vyhledávání.

Registrace do pg_diskann funkce Preview

pg_diskann Flexibilní server Azure Database for PostgreSQL vyžaduje, aby se uživatelé zaregistrovali prostřednictvím našeho formuláře Preview. Pokud se chcete zaregistrovat, postupujte následovně:

  1. Otevření formuláře náhledu
  2. Vyplňte všechny relevantní podrobnosti. K povolení budeme potřebovat ID vašeho předplatného Azure.

Poznámka:

Po vyplnění formuláře náhledu bude trvat nějakou dobu, než se vaše žádost schválí. Potvrzení se odešle na váš e-mail.

Povolení pg_diskann rozšíření

Než budete moct povolit pg_diskann instanci flexibilního serveru Azure Database for PostgreSQL, musíte ji přidat do seznamu povolených, jak je popsáno v tom, jak používat rozšíření PostgreSQL, a zkontrolovat, jestli je správně přidaná spuštěním SHOW azure.extensions;.

Snímek obrazovky s výběrem pg_diskann v parametrech serveru

Důležité

Tato funkce Preview je dostupná jenom pro nově nasazené instance flexibilního serveru Azure Database for PostgreSQL.

Rozšíření pak můžete nainstalovat připojením k cílové databázi a spuštěním příkazu CREATE EXTENSION . Tento příkaz je potřeba opakovat zvlášť pro každou databázi, ve které chcete, aby rozšíření bylo dostupné.

CREATE EXTENSION IF NOT EXISTS pg_diskann CASCADE;

Tento příkaz povolí pgvector , pokud ještě není ve vaší databázi PostgreSQL nainstalovaný.

Poznámka:

Chcete-li odebrat rozšíření z aktuálně připojené databáze, použijte DROP EXTENSION vector;.

Použití diskann metody indexového přístupu

Po instalaci rozšíření můžete vytvořit diskann index ve sloupci tabulky, který obsahuje vektorová data. Pokud například chcete vytvořit index ve embedding sloupci my_table tabulky, použijte následující příkaz:

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)

Možnosti indexu

Při vytváření indexu pomocí diskannmůžete zadat různé parametry pro řízení jeho chování. Tady jsou možnosti, které aktuálně máme:

  • max_neighbors: Maximální počet hran na uzel v grafu. (Výchozí hodnota je 32)
  • l_value_ib: Velikost vyhledávacího seznamu během sestavení indexu (výchozí hodnota je 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
 );

Hodnotu L pro prohledávání indexu (l_value_is) lze nastavit pro celé připojení nebo pro každou transakci (pomocí SET LOCAL v rámci bloku transakce):

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

Postgres se automaticky rozhodne, kdy se má použít index DiskANN. Pokud existují scénáře, které chcete vždy použít index, použijte následující příkaz:

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

Průběh indexování

S PostgreSQL 12 a novějším můžete zkontrolovat pg_stat_progress_create_index průběh indexování.

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

Fáze vytváření indexů DiskANN jsou:

  1. initializing
  2. loading tuples

Upozorňující

V některých případech můžou uživatelé zaznamenat pomalé sestavování indexů.

Výběr funkce pro přístup k indexu

Typ vektoru umožňuje provádět tři typy hledání u uložených vektorů. Při provádění dotazů musíte pro index vybrat správnou funkci přístupu, aby databáze při provádění dotazů mohl váš index vzít v úvahu.

pg_diskann podporuje následující operátory vzdálenosti.

  • vector_l2_ops: <-> Euklidská vzdálenost
  • vector_cosine_ops: <=> Kosinus vzdálenost
  • vector_ip_ops: <#> Vnitřní produkt