Nova是AnalyticDB PostgreSQL 7.0版新一代的向量檢索引擎,旨在提供極致的查詢效能和更高的性價比。它分為磁碟型(Novad)和記憶體型(Novam)兩種模式,前者具有高性價比,後者則面向極致效能情境。本文為您介紹Nova索引的選型及建立操作。
優勢
與傳統的HNSW索引相比,Nova索引具備以下核心優勢:
查詢效能提升:向量查詢速度更快。
記憶體效率最佳化:引入了Novad磁碟型索引,降低記憶體佔用,提供更高的性價比。
寫入輸送量增加:資料寫入與索引構建過程解耦,提升向量資料的寫入效率。
前提條件
核心版本為7.4.2.0及以上的AnalyticDB for PostgreSQL7.0版執行個體。如需使用,請聯絡支援人員升級版本。
容量評估與索引選型
Nova索引分為磁碟型(Novad)和記憶體型(Novam)兩種模式:
磁碟型(Novad):基於圖+分區混合索引實現,HNSW常駐記憶體、IVF儲存於磁碟,磁碟IO友好,索引規模遠超記憶體時效能穩定。對記憶體依賴小於Novam,Novad的索引構建效能大大優於Novam,且索引磁碟佔用遠小於Novam。適用於大規模低成本檢索的使用情境, 在百億、千億資料量級下有顯著的成本優勢。
記憶體型(Novam):基於圖索引實現,記憶體容量越大,效能越優,記憶體不足時自動訪問磁碟。在記憶體充足的情況下,同等規格的Novam查詢效能優於Novad。適用於即時推薦等高效能情境。
Nova索引後台有定期最佳化任務,無業務負載時也可能佔用資源。
不同向量維度和向量數下的資源規格建議如下(僅列舉部分情境,可通過增加資源支援更巨量資料量):
Novad
向量維度 | 向量數 | 建議總計算資源 |
128 | <320M | 8c |
256 | <160M | |
512 | <80M | |
768 | <50M | |
1024 | <40M | |
1536 | <26M | |
2048 | <20M | |
128 | <640M | 16c |
256 | <320M | |
512 | <160M | |
768 | <100M | |
1024 | <80M | |
1536 | <60M | |
2048 | <40M | |
128 | <1.28B | 32c |
256 | <640M | |
512 | <320M | |
768 | <200M | |
1024 | <160M | |
1536 | <120M | |
2048 | <80M | |
128 | <5.12B | 128c |
256 | <2.56B | |
512 | <1.28B | |
768 | <800M | |
1024 | <640M | |
1536 | <480M | |
2048 | <320M | |
128 | <200B | 4096c |
256 | <100B | |
512 | <50B | |
768 | <33B | |
1024 | <25B | |
1536 | <16B | |
2048 | <12B | |
128 | <1.6T | 32768c |
256 | <800B | |
512 | <400B | |
768 | <260B | |
1024 | <200B | |
1536 | <130B | |
2048 | <100B |
Novam
向量維度 | 向量數 | 建議總計算資源 |
128 | <32M | 8C |
256 | <16M | |
512 | <8M | |
768 | <5M | |
1024 | <4M | |
1536 | <2.6M | |
2048 | <2M | |
128 | <64M | 16C |
256 | <32M | |
512 | <16M | |
768 | <10M | |
1024 | <8M | |
1536 | <5M | |
2048 | <4M | |
128 | <128M | 32C |
256 | <64M | |
512 | <32M | |
768 | <20M | |
1024 | <16M | |
1536 | <10M | |
2048 | <8M |
文法
CREATE INDEX [INDEX_NAME]
ON [SCHEMA_NAME].[TABLE_NAME]
USING ANN(COLUMN_NAME)
WITH (DIM=<DIMENSION>,
ALGORITHM=<ALGORITHM>,
DISTANCEMEASURE=<MEASURE>,
...);參數說明:
INDEX_NAME:索引名。
SCHEMA_NAME:模式(命名空間)名。
TABLE_NAME:表名。
COLUMN_NAME:向量索引列名。
其他向量索引參數:
參數名
含義
預設值
取值範圍
dim
向量維度。
無(必填)
[1, 8192]
algorithm
索引演算法:
novam: 不帶量化壓縮的圖索引。
novad: 帶rabitq量化的分區索引。
hnswflat: 不帶量化壓縮的hnsw索引。
hnswflat
(novam, novad, hnswflat)
distancemeasure
支援的相似性距離度量演算法:
L2:使用歐氏距離(平方)函數構建索引,通常適用於圖片相似性檢索情境。計算公式:

IP:使用反內積距離函數構建索引,通常適用於向量歸一化之後替代餘弦相似性。計算公式:

COSINE:使用餘弦距離函數構建索引,通常適用於文本相似性檢索情境。計算公式:

l2
(L2, IP, COSINE)
max_delta_vecs
最大寫入攢批向量數。
1048576
[1024, 1073741824]
hnsw_m
Novam中鄰居數,通常情況下,越大圖品質越好,構建時間越長。
16
[10, 1000]
hnsw_ef_construction
Novam構建時搜尋候選集大小,越大圖品質越好,構建時間越長。
64
[40, 4000]
base_slice_log2_size
Novam檔案分區大小的log2對數。
24
[10, 30]
nlist
Novad列表數。
1024
[2, 1073741824]
accel_m
Novad加速層鄰居數。
16
[8, 1024]
accel_efc
Novad加速層構建候選集大小。
128
[1, 32768]
rabitq_bits
rabitq壓縮位元數。
1
[1, 8]
max_cluster_vecs
Novad單檔案中心點最大向量數。
65536
[1, 10000000]
樣本
建立樣本表。
CREATE TABLE chunks ( id SERIAL PRIMARY KEY, chunk VARCHAR(1024), intime TIMESTAMP, url VARCHAR(1024), feature REAL[] ) DISTRIBUTED BY (id);對向量列建立Nova索引。
建立餘弦相似性度量的Novad向量索引。
CREATE INDEX idx_feature_novad_cosine ON chunks USING ann(feature) WITH ( dim=1536, algorithm=novad, distancemeasure=cosine, nlist=4096, rabitq_bits=1 );建立歐氏距離度量的Novam向量索引。
CREATE INDEX idx_feature_novam_l2 ON chunks USING ann(feature) WITH ( dim=1536, algorithm=novam, distancemeasure=l2, hnsw_m=32, hnsw_ef_construction=200 );