メインコンテンツまでスキップ
バージョン: 26.x

パフォーマンステストと分析

この文書では、Doris ANN Indexのクエリとインジェストパフォーマンスについて紹介します。すべてのベンチマークはVectorDBBenchを使用して実施されています。

テスト環境

テストで使用されたすべてのマシンは16個のCPUコアと64GBメモリを搭載し、CPUモデルはIntel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHzです。FEとBEは単一の16C64GBマシン上に配置されています(注:これは本番環境での推奨デプロイメントではありません。本番環境では、FEとBEは別々にデプロイする必要があります)。テストされたバージョンはApache Doris 4.0.2です。使用されたデータセットはVectorDBBench Performance768D1Mで、768次元の100万個のベクトルが含まれています。

結果

performance

分析

                    ┌──────────────────────┐
│ Recall │
│ (Higher is Better) │
└──────────▲───────────┘
/ \
/ \
/ \
/ \
/ \
/ \
┌───────────┘ └───────────┐
│ │
│ │
▼ ▼
┌──────────────────────┐ ┌────────────────────────┐
│ Query QPS │ │ Indexing Throughput │
│ (Latency / QPS) │ │ (Higher is Better) │
│ (Lower Latency Better)│ │ │
└──────────────────────┘ └────────────────────────┘

ベクトル検索において、本格運用可能なベクトルデータベースは通常、すべての次元を同時に最大化することが困難なパフォーマンスの「三角形」に直面します。それは、クエリパフォーマンス(QPS/レイテンシ)、再現率、およびインデックス作成スループットです。システム設計では、これら3つの要素間でのトレードオフがしばしば必要となります。

最も広く使用されているベクトルインデックスであるHNSW(Hierarchical Navigable Small World)を例に挙げてみましょう。これは検索を最適化するためにグラフ構造に依存しています。HNSWには3つの主要な調整可能なハイパーパラメータがあります:

  • max_degree:グラフ内の各ノードの最大出次数で、グラフの密度と接続性を決定します。
  • ef_construction:インデックス構築時に使用される候補セットのサイズ。値を大きくすると、一般的により高品質なグラフが生成されます。
  • hnsw_ef_search:クエリ時の探索ウィンドウサイズで、再現率とレイテンシに直接影響します。

原理的には、インデックス構築時にmax_degreeとef_constructionを増加させることで、グラフの接続性とナビゲーション性を大幅に向上させ、より高い再現率を実現できます。高品質なグラフにより、クエリ時により小さなhnsw_ef_searchが可能になり、検索コストを削減してクエリパフォーマンスを向上させることができます。ただし、これらのインデックス構築パラメータの増加にはトレードオフが伴います。インデックス構築により多くの計算とメモリリソースが必要となり、取り込みパフォーマンスの低下につながります。これがベクトルデータベース設計における典型的な三つのジレンマです。

Apache Dorisは、ベクトル検索においてよりバランスの取れたパフォーマンス三角形の構築を目指しています。実行エンジンの最適化、ストレージフォーマットの改善、およびHNSW構築のエンジニアリングレベルでの並列加速を通じて、Dorisはインデックス品質や高い再現率を犠牲にすることなく、全体的なインデックス作成スループットを大幅に向上させています。

Performance768D1Mデータセットにおいて、結果は同等のインデックス品質の下で、Apache Dorisが同等システムよりも著しく優れた取り込みパフォーマンスを示すことを表しています。さらに重要なことに、Dorisは取り込み速度を向上させるためにグラフ品質を妥協することはありません。我々のテストでは、Apache Dorisは97%を超える再現率を維持しながら989.1のQPSを達成し、パフォーマンス三角形のすべての3次元において強力なバランスを実現しています。

Reproduction

NUM_PER_BATCH=500000 vectordbbench doris --host 127.0.0.1 --port 9030 --http-port 8030 --case-type Performance768D1M --db-name vdb --num-concurrency 80 --stream-load-rows-per-batch 500000 --index-prop max_degree=128,ef_construction=256 --session-var hnsw_ef_search=100