全部產品
Search
文件中心

AnalyticDB:建立Nova向量索引(公測)

更新時間:Dec 23, 2025

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:使用歐氏距離(平方)函數構建索引,通常適用於圖片相似性檢索情境。計算公式:image.png

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

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

    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]

樣本

  1. 建立樣本表。

    CREATE TABLE chunks (
        id SERIAL PRIMARY KEY,
        chunk VARCHAR(1024),
        intime TIMESTAMP,
        url VARCHAR(1024),
        feature REAL[]
    ) DISTRIBUTED BY (id);
  2. 對向量列建立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
      );