共用方式為


如何啟用及使用 適用於 PostgreSQL 的 Azure 資料庫 的 diskann 擴充功能 - 彈性伺服器 (預覽)

DiskANN 是可調整的近似近鄰搜尋演算法,可在任何規模上有效率地進行向量搜尋。 它提供高召回率、每秒高查詢(QPS)和低查詢延遲,甚至針對數十億點數據集。 這使得它成為處理大量數據的強大工具。 深入瞭解 Microsoft 的 DiskANN

pg_diskann適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的擴充功能新增了使用 DiskANN 的支援,以便有效率的向量索引編製和搜尋。

註冊 pg_diskann 預覽功能

pg_diskannfor 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器需要使用者透過我們的預覽表單註冊。 請遵循下列步驟註冊:

  1. 開啟預覽表單
  2. 填寫所有相關詳細數據。 我們需要您的 Azure 訂用帳戶標識碼才能啟用。

注意

填寫預覽表單之後,需要一些時間才能核准您的要求。 確認將會傳送至您的電子郵件。

啟用 pg_diskann 擴充功能

在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例上啟用pg_diskann之前,您必須將它新增至允許清單,如如何使用 PostgreSQL 擴充功能中所述,並執行 來檢查是否已正確新增SHOW azure.extensions;

選取伺服器參數中pg_diskann的螢幕快照。

重要

這項預覽功能僅適用於新部署 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例。

然後,您可以連線到目標資料庫並執行 CREATE EXTENSION 命令來安裝擴充功能 。 您必須為每個您希望延伸模組可供使用的資料庫分別重複該命令。

CREATE EXTENSION IF NOT EXISTS pg_diskann CASCADE;

此命令會在 PostgreSQL 資料庫中尚未安裝時啟用 pgvector

注意

若要從目前連線的資料庫中移除延伸模組,請使用 DROP EXTENSION vector;

使用 diskann 索引存取方法

安裝延伸模組之後,您可以在包含向量數據的數據表數據行上建立 diskann 索引。 例如,若要在數據表的數據my_table行上embedding建立索引,請使用下列命令:

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)

索引選項

使用 diskann建立索引時,您可以指定各種參數來控制其行為。 以下是我們目前擁有的選項:

  • max_neighbors:圖形中每個節點的邊緣數目上限。 (預設值為 32)
  • l_value_ib:索引建置期間搜尋清單的大小(預設值為 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_value_is) 的 L 值可以針對整個連接或每筆交易設定(在交易區塊內使用 SET LOCAL ):

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

Postgres 會自動決定何時使用 DiskANN 索引。 如果您一律想要使用索引,請使用下列命令:

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

編製索引進度

若採用 PostgreSQL 12 和更新的版本,即可使用 pg_stat_progress_create_index 來查看編製索引進度。

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

建置 DiskANN 索引的階段如下:

  1. initializing
  2. loading tuples

警告

在某些情況下,使用者可能會遇到索引建置時間變慢的情況。

選取索引存取函式

向量類型可讓您對預存向量執行三種類型的搜尋。 您必須為索引選取正確的存取函式,讓資料庫在執行查詢時可以考慮您的索引。

pg_diskann 支援下列距離運算符

  • vector_l2_ops<-> Euclidean 距離
  • vector_cosine_ops<=> 餘弦距離
  • vector_ip_ops<#> 內部產品

與 適用於 PostgreSQL 的 Azure 資料庫 產品小組分享您的建議和 Bug。