このページでは、 MongoDB ベクトル検索パフォーマンス ベンチマークの結果を調べることができます。 MongoDBは、さまざまな実装ニーズをサポートするさまざまなソリューションを提供しています。顧客は、特定のビジネス設定に適したパフォーマンスと精度のレベルを選択できます。
結果の概要
2048 次元で
voyage-3-large埋め込みを使用する 15.3M ベクトルでは、量子化が構成されたMongoDB ベクトル検索 は90-95% の精度を維持し、 クエリレイテンシは 50 ミリ秒未満です。バイナリ量子化は、インデックスの提供価格が約 4 分の 1 になります。完全な忠実度ベクトルで再スコア付けするため、多くの大増やすなワークロードに適したオプションになる可能性がありますが、パフォーマンスがニーズに合ったものであることを確認するために、サンプルデータセットでテストを実行中をお勧めします。
量子化を使用して大規模なワークロードを実行する場合は、1024を超える次元が推奨されます。
選択的フィルターにより、
numCandidatesに選択された値によってパフォーマンスが改善または低下する可能性があります。バイナリ量子化の再スコアリングにかかる追加コストは、並行処理が多いワークロードを実行する際にスループットの低下として現れます。
シャーディングによりスループットが若干向上しますが、スループットを向上させるためには、検索ノード数または検索ノードで使用可能なコアの数をスケールアウトすることをお勧めします。
多次元ベンチマークにおけるリコールとレイテンシの分析
最初の結果セットは、ベクトルの複数次元(256、512、1024、2048)を含む5.5Mドキュメントデータセットに対して実行されたテストを示します。すべては、各ドキュメント内でvoyage-3-largeを使用して生成されました。

スカラー量子化された結果は、すべてバイナリ量子化された結果よりも高いレベルで始まりますが、numCandidates が増加しても非単調レベルに維持されます。逆に、バイナリ定量化クエリでは、numCandidates が要求されるにつれて、より正確な結果が得られ、スカラー量子化の非公式に近似し、場合によってはそれを渡すと、レイテンシが高く、特に 1000 の numCandidates を超えるようにコストます。
limit の値が低い場合、通常、100% の精度に近づくには、より高い numCandidates が必要です。これは、クエリが最上位結果についての選択性が高いためです。この影響は、 バイナリ数量化プロットで特に顕著です。高次元ベクトル(1024d 以上)は、豊富な表現により近傍の区別が容易になるため、90-95% のターゲット範囲で低速 numCandidates に達します。 limit が結果を 100 にするテストは、limit が結果を 10 に渡すテストよりも低い numCandidates で 90-95% のターゲット範囲に達します。これは、結果セットが大きいほど、関連する近隣地域を表示する機会を増やす。
この情報を踏まえ、大規模なデータセットを扱う際は、量子化を使用せず低次元で行う代わりに、1024d以上の次元を使用してスケーリングに量子化を適用することをお勧めします。ユースケースにリクエストされたベクトル量も要因として働きます。
より大規模なベンチマーク結果
大規模な15.3Mベクトルデータセットでは、次元を2048dに固定し、量子化、フィルター、同時実行性がパフォーマンスに与える影響を調査しました。前回の一連のテスト結果から、次元が高いほどリコールがより有利に維持されることが示されたため、2048dに固定することにしましたが、1024dも90~95%のリコール目標を達成するために有益であることが考えられます。
リコールとレイテンシの分析
バイナリ量子化を使用して90-95%のリコール目標を達成する場合、ベースラインと比べてはるかに大量のnumCandidatesが必要になることを観察しました。一般的にnumCandidatesが高いほどレイテンシが高くなりますが、状況によっては異なる場合があります。

フィルタリング
ペット用品カテゴリ(コーパスの~3%)の15.3Mアイテムのうち~500kアイテムのデータセットで選択的フィルターを使用した場合、リコールとレイテンシで何が起こるかを観察したところ、

選択的フィルターとは、データの小さなスライス(この場合は ~3%)に一致するフィルターです。検索エンジンはこの小さなサブセット内で最近傍を検索する必要があるため、同じ再現率を実現するにはより多くのインデックスを検索し、より多くの候補を評価する必要があります。各クエリは、フィルタリングされていないクエリよりも多くの機能を行います。
予想どおり、3% 選択可能フィルターによりクエリの動作が増えます。 limit 値が低いバイナリ定量化では、フィルタリングされていないクエリと比較して、90-95% の再現率を実現するために約 4x の作業が必要でした。
Hierarchical Navigable Small Worlds の Agon-1 検索戦略をサポートする Lucene 10 の将来の改善によって、このプロセスが改善される可能性があります。ただし、要求された候補の数がセグメント内のメタデータフィルターに一致するベクトルの数を超える場合にENNを実行すると、選択された量子化レプリカセットに関係なく、フィルターの選択性がクエリ パフォーマンスの大部分を占めることが示されます。
同時実行性
これらのテストは、スカラー量子化とバイナリ量子化を使用する場合にさまざまなlimit値で1、10、100の間の並行リクエストをスケーリングします。numCandidatesは、90~95%のリコールを達成するために選択された値で選択されます。

スカラー量子化では、 のすべての値でより高い QPSlimitnumCandidates が得られます。これは、各クエリがより低い で完了し、再スコアリングなしで完了する可能性があるためです。より高い同時実行性では、同時実行性 10と同時実行性 の QPS100 曲線が閉じており、システムが利用可能な CPU リソースを効率的に使用していることを示し、余計な同時実行性は主にレイテンシに影響します。
1 つの例外的なデータ点は、スカラー数量化の同時実行性 100 は制限 10、QPS が大幅に高い値を返します。これは、再スコアリングが行われず、limit の値が低いほど、このクエリで実行される比較が少なくなり、各リクエストがより速く戻り、コアが他のクエリの処理に使用できるようになるためである可能性があります。
検索ノード階層を拡大するか検索ノード数を最小2から最大32件に拡大すして利用可能なvCPUを拡大しリクエストを処理することは、並行性ボトルネックを解決して数千のQPSに拡大するのに役立つ場合があります。
シャーディング
また、クラスターとコレクションがシャーディングされ(_idで)、フィルタリングされていないクエリがバイナリ量子化されたインデックスに対して発行された場合に何が起こるかも観察しました。

ここでは、90-95% の呼び出し範囲で結果を生成するために、numCandidates の値を下げると、シャーディングされた結果の上限 10 で QPS が高くなることがわかります。これは、15.3M データセットが 3 つのシャードに分裂おり、それぞれのインデックスは 5.1M ベクトルで埋められ、HNSW グラフを含むセグメントに分散されているためです。機能的には、高度でない検索を実行しており、3 シャードに同時に収集された各クエリ スキャッターが最も近い n ベクトルを見つける可能性が高くなります。このため、シャーディングでは numCandidates を減らし、クエリの処理に使用できるコアを増やすことができるため、QPS は若干高くなりますが、その差はあまり大きくありません。ベクトル検索のパフォーマンスは信頼できるため、スループット を増やすためにクラスターをシャーディングする必要はありません。
注意
制限100、numCandidates 200の値は類似しています。インテリジェントなシャードキーのマッチングをフィルターとして使用することで、フィルターされたクエリのパフォーマンスの向上を期待できます。