Jak włączyć i używać rozszerzenia diskann dla usługi Azure Database for PostgreSQL — serwer elastyczny (wersja zapoznawcza)
DiskANN to skalowalny przybliżony algorytm wyszukiwania najbliższych sąsiadów umożliwiający wydajne wyszukiwanie wektorów w dowolnej skali. Oferuje wysoką kompletność, wysokie zapytania na sekundę (QPS) i małe opóźnienia zapytań, nawet w przypadku zestawów danych z miliardem punktów. Dzięki temu jest to zaawansowane narzędzie do obsługi dużych ilości danych. Dowiedz się więcej na temat nazwy DiskANN firmy Microsoft
pg_diskann
Rozszerzenie dla serwera elastycznego usługi Azure Database for PostgreSQL dodaje obsługę używania nazwy DiskANN do wydajnego indeksowania i wyszukiwania wektorów.
Rejestrowanie w pg_diskann
funkcji w wersji zapoznawczej
pg_diskann
w przypadku usługi Azure Database for PostgreSQL — serwer elastyczny wymaga od użytkowników zarejestrowania się za pośrednictwem naszego formularza w wersji zapoznawczej. Wykonaj poniższe kroki, aby się zarejestrować:
- Otwieranie formularza podglądu
- Wypełnij wszystkie istotne szczegóły. Do włączenia będziemy potrzebować twojego identyfikatora subskrypcji platformy Azure.
Uwaga
Po wypełnieniu formularza wersji zapoznawczej zatwierdzenie żądania zajmie trochę czasu. Potwierdzenie zostanie wysłane na Twoją wiadomość e-mail.
Włączanie pg_diskann
rozszerzenia
Przed włączeniem pg_diskann
w wystąpieniu serwera elastycznego usługi Azure Database for PostgreSQL należy dodać go do listy dozwolonych zgodnie z opisem w temacie how to use PostgreSQL extensions (Jak używać rozszerzeń PostgreSQL) i sprawdzić, czy dodano je poprawnie, uruchamiając polecenie SHOW azure.extensions;
.
Ważne
Ta funkcja w wersji zapoznawczej jest dostępna tylko dla nowo wdrożonych wystąpień serwera elastycznego usługi Azure Database for PostgreSQL.
Następnie możesz zainstalować rozszerzenie, łącząc się z docelową bazą danych i uruchamiając polecenie CREATE EXTENSION . Należy powtórzyć polecenie oddzielnie dla każdej bazy danych, w której ma być dostępne rozszerzenie.
CREATE EXTENSION IF NOT EXISTS pg_diskann CASCADE;
To polecenie umożliwia, pgvector
jeśli jeszcze nie zainstalowano go w bazie danych PostgreSQL.
Uwaga
Aby usunąć rozszerzenie z aktualnie połączonej bazy danych, użyj polecenia DROP EXTENSION vector;
.
Korzystanie z diskann
metody dostępu do indeksu
Po zainstalowaniu rozszerzenia można utworzyć diskann
indeks w kolumnie tabeli zawierającej dane wektorowe. Aby na przykład utworzyć indeks w embedding
kolumnie my_table
tabeli, użyj następującego polecenia:
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)
Opcje indeksu
Podczas tworzenia indeksu za pomocą diskann
polecenia można określić różne parametry, aby kontrolować jego zachowanie. Poniżej przedstawiono opcje, które są obecnie dostępne:
max_neighbors
: Maksymalna liczba krawędzi na węzeł na wykresie. (Wartości domyślne to 32)l_value_ib
: Rozmiar listy wyszukiwania podczas kompilacji indeksu (wartość domyślna to 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
);
Wartość L skanowania indeksu (l_value_is
) można ustawić dla całego połączenia lub transakcji (przy użyciu SET LOCAL
bloku transakcji):
SET diskann.l_value_is = 100;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- uses 100 candidates
Usługa Postgres automatycznie zdecyduje, kiedy używać indeksu DiskANN. Jeśli istnieją scenariusze, które zawsze chcesz używać indeksu, użyj następującego polecenia:
SET LOCAL enable_seqscan TO OFF;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- forces the use of index
Postęp indeksowania
Korzystając z programu PostgreSQL 12 i nowszych, możesz użyć pg_stat_progress_create_index
polecenia , aby sprawdzić postęp indeksowania.
SELECT phase, round(100.0 * blocks_done / nullif(blocks_total, 0), 1) AS "%" FROM pg_stat_progress_create_index;
Fazy tworzenia indeksów DiskANN to:
initializing
loading tuples
Ostrzeżenie
W niektórych przypadkach użytkownicy mogą doświadczać wolnych czasów kompilacji indeksu.
Wybieranie funkcji dostępu do indeksu
Typ wektora umożliwia wykonywanie trzech typów wyszukiwań w przechowywanych wektorach. Musisz wybrać poprawną funkcję dostępu dla indeksu, aby baza danych mogła rozważyć indeks podczas wykonywania zapytań.
pg_diskann
obsługuje następujące operatory odległości
vector_l2_ops
:<->
Odległość euklidesowavector_cosine_ops
:<=>
Odległość cosinusuvector_ip_ops
:<#>
Produkt wewnętrzny