すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:Nova ベクターインデックスの作成

最終更新日:Apr 10, 2026

AnalyticDB for PostgreSQL V7.0 の次世代ベクトルエンジンである Nova は、卓越したクエリパフォーマンスとコスト効率を実現します。コスト効率の高いディスクベース (Novad) モードと、パフォーマンス専有型のメモリベース (Novam) モードの 2 つのモードを提供します。このトピックでは、Nova ベクターインデックスの選択方法と作成方法について説明します。

メリット

Nova ベクターインデックスは、従来の HNSW インデックスと比較して、主に次のメリットがあります。

  • クエリパフォーマンスの向上:ベクタークエリの高速化を実現します。

  • メモリ効率の最適化:ディスクベース (Novad) のインデックスはメモリ使用量を削減し、優れたコスト効率を提供します。

  • 書き込みスループットの向上:データインジェストとインデックス構築を分離することで、ベクトルデータの書き込み効率を向上させます。

前提条件

容量評価とインデックスの選択

Nova ベクターインデックスには、ディスクベース (Novad) とメモリベース (Novam) の 2 つのモードがあります。

  • ディスクベース (Novad):グラフとパーティションベースのハイブリッドインデックスを使用します。HNSW グラフはメモリに常駐し、転置ファイル (IVF) インデックスはディスクに保存されます。この設計はディスク I/O に最適化されており、インデックスサイズがメモリ容量を大幅に超えても安定したパフォーマンスを保証します。Novam と比較して、Novad はメモリフットプリントが小さく、インデックス構築のパフォーマンスが高く、ディスク使用率が低いです。大規模でコスト効率の高い取得シナリオに最適であり、数百億から数千億規模のベクトルデータセットに対して、大きなコストメリットをもたらします

  • メモリベース (Novam):グラフインデックスの実装を使用します。そのパフォーマンスは、使用可能なメモリ容量に比例して向上し、メモリが不足すると自動的にディスクにスピルします。十分なメモリがあれば、同じリソース仕様の Novad よりも優れたクエリパフォーマンスを発揮します。リアルタイムレコメンデーションなどのパフォーマンス専有型シナリオに最適です

重要

Nova ベクターインデックスはバックグラウンドで定期的な最適化タスクを実行するため、アクティブなワークロードがない場合でもリソースを消費する可能性があります。

以下の表は、さまざまなベクトル次元とベクトル数に対する推奨リソース仕様の例です。これらは一例であり、より大規模なデータセットをサポートするために、リソースを追加することも可能です。

Novad

ベクトル次元

ベクトル数

推奨計算リソース

128

3.2 億未満

8 コア

256

1.6 億未満

512

8000 万未満

768

5000 万未満

1024

4000 万未満

1536

2600 万未満

2048

2000 万未満

128

6.4 億未満

16 コア

256

3.2 億未満

512

1.6 億未満

768

1 億未満

1024

8000 万未満

1536

6000 万未満

2048

4000 万未満

128

12.8億未満

32 コア

256

6.4 億未満

512

3.2 億未満

768

2 億未満

1024

1.6 億未満

1536

1.2 億未満

2048

8000 万未満

128

51.2 億未満

128 コア

256

25.6 億未満

512

< 12.8億

768

8 億未満

1024

6.4 億未満

1536

4.8 億未満

2048

3.2 億未満

128

2000 億未満

4,096 コア

256

1000 億未満

512

500 億未満

768

330 億未満

1024

250 億未満

1536

160 億未満

2048

120 億未満

128

1.6 兆未満

32,768 コア

256

8000 億未満

512

4000 億未満

768

2600 億未満

1024

2000 億未満

1536

1300 億未満

2048

1000 億未満

Novam

ベクトル次元

ベクトル数

推奨計算リソース

128

3200 万未満

8 コア

256

1600 万未満

512

800 万未満

768

500 万未満

1024

400 万未満

1536

260 万未満

2048

200 万未満

128

6400 万未満

16 コア

256

3200 万未満

512

1600 万未満

768

1000 万未満

1024

800 万未満

1536

500 万未満

2048

400 万未満

128

1.28 億未満

32 コア

256

6400 万未満

512

3200 万未満

768

2000 万未満

1024

1600 万未満

1536

1000 万未満

2048

800 万未満

構文

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

    1 回の書き込み操作でバッチ処理されるベクトルの最大数。

    1048576

    [1024, 1073741824]

    hnsw_m

    Novam の場合、グラフ内の各ノードの近傍数を指定します。値を大きくすると、一般的にグラフの品質は向上しますが、構築時間が増加します。

    16

    [10, 1000]

    hnsw_ef_construction

    Novam の場合、インデックス構築時の検索候補セットのサイズを定義します。値を大きくすると、グラフの品質は向上しますが、構築時間が増加します。

    64

    [40, 4000]

    base_slice_log2_size

    Novam の場合、ファイルスライスサイズの底 2 の対数です。

    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 の場合、単一ファイル内の 1 つの重心に対するベクトルの最大数です。

    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
      );