メインコンテンツまでスキップ

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

このドキュメントでは、Doris ANN Indexのクエリおよび取り込みパフォーマンスについて紹介します。すべてのベンチマークはVectorDBBenchを使用して実施されています。

単一ノードおよび分散セットアップでの大規模な結果(10M/100Mレベルのデータセット)については、Large-scale Performance Benchmarkを参照してください。

テスト環境

テストで使用されたすべてのマシンは16CPUコアと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次元にわたって強いバランスを実現しています。

再現

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