Docs Menu
Docs Home
/
データベース マニュアル
/

mongot デプロイに関するリソース割り当てに関する考慮事項

このセクションでは、mongot 配置に関する重要な計画質問に答え、検索アーキテクチャを設計するための実行可能な手順を説明します。包括的な概要については、このセクションを順次お読みください。あるいは、このセクションを参照として使用して、必要に応じて関連するセクションにスキップすることもできます。このセクションの目的は、リソース要件を正確に見積もり、堅牢な配置を構築できるようにすることです。

データの構造とインデックス定義は、ディスク使用量RAM要件のプライマリドライバーです。このセクションを使用して、最終インデックスサイズとインデックスを効率的に管理するために必要なメモリを見積もります。

1

ディスク容量を見積もる開始点として、次の式を使用します。

Estimated Index Size = (Number of Documents) x (Avg. Size of Indexed Text per Doc) x (Expansion Factor)

展開係数は重要であり、トークン化戦略に大きく依存します。これらの乗数をガイドとして使用します。

ユースケース
乗数

標準/言語トークン化

1.5x - 3x

キーワード/簡易トークン化

1.1x - 1.5x

EdgeGram(オートコンプリート)

5x - 8x

nGram(部分一致)

8x - 15x+ (特に minGram 値が低い場合、これは極端に大きくなる可能性があります)。

注意

上記の展開係数乗数は一般的な例を表しており、すべてのテキスト ベースのコンテンツに適用されるとは限りません。配置のインデックス計算を決定するには、必ず独自のデータでテストしてください。

2

ベクトル検索の場合は、インデックスサイズを個別に計算し、それを合計に追加します。未加工のベクトルデータのサイズは、この値の適切なベースラインです。

Vector Index Size = (Total Number of Vectors) x (Vector Dimensions) x 4 bytes / dimension

注意

この式は float32 ベクトルの式です。ディスク上の最後の HNSWインデックスには、追加のオーバーヘッドが発生します。

3
静的マッピングの使用
ドキュメント構造が予測できない場合は、動的マッピングを無効にします。動的マッピングは「マッピングの急増」につながり、数千の意図しないフィールドが作成され、 RAMが過剰に消費され、不安定になります。dynamic: false を使用してインデックスを明示的に定義します。詳しくは、「 静的マッピングと動的マッピング 」を参照してください。
保存されたソースフィールドの制限
mongotインデックス自体には、検索結果に必要な最小限のフィールド セットのみを保存します。MongoDB のプライマリコレクションからフィールドを取得すると、インデックスで使用されるディスク容量が削減されることが多いです。詳しくは、「 MongoDB Search インデックスに保存されたソース フィールドの定義 」を参照してください。
高メモリ機能を考慮する
シノニム コレクションと深くネストされたembeddedDocumentは、重大なメモリ アーティファクトを生成することに注意してください。これらの機能を頻繁に使用する場合は、mongot プロセスにより多くのJavaヒープ領域を割り当てる必要があります。

書込み (write) のレートとタイプ(挿入、更新、削除)によって、検索インデックスがデータベースと同期され続けるために必要な CPUディスク IOPS が決まります。

書込みスループットとメンテナンス用にプロビジョニングするには、次の手順に従います。

1
高い書込み率(>1,000操作/秒)
このワークロードは CPU バウンドと I/O バウンドです。高 CPU カウントと高速ストレージを持つサーバーをプロビジョニングします。mongot プロセスの CPU 使用率とディスク I/O キューの長さを監視します。これらのメトリクスが一貫して高く、レプリケーションラグが増加している場合は、ハードウェアを増やすアップする 必要があります。
低書込み率(1 秒あたり <100 操作)
通常、標準ハードウェア構成で十分です。
2
インデックスの集約
単一のコレクションに複数の個別の検索インデックスを定義しないでください。各インデックスはオーバーヘッドを追加します。代わりに、単一で包括的なインデックス定義を作成します。
複雑なビューのマテリアライズド
複雑なビューをインデックス化している場合、変更ストリームのパフォーマンスが制約される可能性があります。mongot がインデックスを作成するために、シンプルで事前集計されたデータソースを提供するために、マテリアライズドビューを作成することを検討してください。
3

インデックス定義を変更すると、リソースを集中的に消費する完全な再構築がトリガーされます。

再構築により、クエリ リクエストを新しいインデックスに切り替える前に、古いインデックスに加えて新しいインデックスが作成されます。ストレージを実行中することなくこのプロセスに対応するために、現在のインデックスサイズの少なくとも 125% が空きディスク領域として使用可能であることを常に確認してください。

4

極端に要求される書込みワークロードの場合、単一の mongotノードを垂直にスケーリングするだけでは十分でない場合があります。

1 秒あたり 10,000 操作を超える継続的な書込み負荷が予想される場合、シャーディングが最も効果的なスケーリング戦略です。シャードごとに少なくとも 1 mongot が必要です。mongot は、接続されているシャード内のコレクションのみをインデックス化するため、インデックス作成負荷を水平方向に分散するのに役立ちます。

クエリパフォーマンスは、主に処理用の CPU とキャッシュ用のRAMの関数です。クエリの複雑さと量によって、レイテンシターゲットを満たすために必要なリソースが決まります。

クエリ パフォーマンスに必要な配置サイズを見積もるには、次の手順を行います。

1

CPU ベースラインを確立するには、 1 秒あたりのクエリ数(QPS) ターゲットを使用します。一般的な開始点は、10 QPS ごとの 1 CPU コアです。

このベースラインは単純なクエリを前提としています。複雑な集計、ファジー一致、または正規表現クエリを伴うワークロードの場合、コアごとに実現できるのは 2-5 QPS のみです。逆に、単純なターム一致ではコアごとに 20+QPS が生成される場合があります。常に実際のクエリを組み合わせてパフォーマンスをテストしてください。

2

RAM は、高速クエリにとって最も重要な要素です。

全文検索
目的は、インデックスの多くをオペレーティング システムのファイルシステムキャッシュにできるだけ多く含めることです。最適なパフォーマンスを得るには、ディスク上のインデックスの合計サイズと一致するように十分なRAM をmongotノードにプロビジョニングします。これにより、低速ディスク読み取りが最小限に抑えられます。
ベクトル検索
低レイテンシのベクトル検索の場合、HNSWグラフインデックスがメモリ内に存在する必要があります。最小必要RAMを計算するには、インデックスサイズ推定手順の手順を使用し、オーバーヘッドに 20-25% のバッファを追加します。ベクトルインデックスがRAMに収まらない場合、クエリレイテンシが増加します。

注意

RAM要件を減らすには、ベクトル量子化の使用を検討します。ベクトル量子化によりベクトル埋め込みが圧縮されるため、メモリのフットプリント(およびそれを保持するために必要なRAM )が低下し、再現率や精度への影響が最小限に抑えられます。

戻る

アーキテクチャパターン

項目一覧