如何啟用及使用 適用於 PostgreSQL 的 Azure 資料庫 的 diskann 擴充功能 - 彈性伺服器 (預覽)
DiskANN 是可調整的近似近鄰搜尋演算法,可在任何規模上有效率地進行向量搜尋。 它提供高召回率、每秒高查詢(QPS)和低查詢延遲,甚至針對數十億點數據集。 這使得它成為處理大量數據的強大工具。 深入瞭解 Microsoft 的 DiskANN
pg_diskann
適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的擴充功能新增了使用 DiskANN 的支援,以便有效率的向量索引編製和搜尋。
註冊 pg_diskann
預覽功能
pg_diskann
for 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器需要使用者透過我們的預覽表單註冊。 請遵循下列步驟註冊:
- 開啟預覽表單
- 填寫所有相關詳細數據。 我們需要您的 Azure 訂用帳戶標識碼才能啟用。
注意
填寫預覽表單之後,需要一些時間才能核准您的要求。 確認將會傳送至您的電子郵件。
啟用 pg_diskann
擴充功能
在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例上啟用pg_diskann
之前,您必須將它新增至允許清單,如如何使用 PostgreSQL 擴充功能中所述,並執行 來檢查是否已正確新增SHOW azure.extensions;
。
重要
這項預覽功能僅適用於新部署 適用於 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 索引的階段如下:
initializing
loading tuples
警告
在某些情況下,使用者可能會遇到索引建置時間變慢的情況。
選取索引存取函式
向量類型可讓您對預存向量執行三種類型的搜尋。 您必須為索引選取正確的存取函式,讓資料庫在執行查詢時可以考慮您的索引。
pg_diskann
支援下列距離運算符
vector_l2_ops
:<->
Euclidean 距離vector_cosine_ops
:<=>
餘弦距離vector_ip_ops
:<#>
內部產品
與 適用於 PostgreSQL 的 Azure 資料庫 產品小組分享您的建議和 Bug。