このセクションでは、mongot
配置に関する重要な計画質問に答え、検索アーキテクチャを設計するための実行可能な手順を説明します。包括的な概要については、このセクションを順次お読みください。あるいは、このセクションを参照として使用して、必要に応じて関連するセクションにスキップすることもできます。このセクションの目的は、リソース要件を正確に見積もり、堅牢な配置を構築できるようにすることです。
データ特性とインデックス
データの構造とインデックス定義は、ディスク使用量とRAM要件のプライマリドライバーです。このセクションを使用して、最終インデックスサイズとインデックスを効率的に管理するために必要なメモリを見積もります。
ベースラインインデックスサイズの計算
ディスク容量を見積もる開始点として、次の式を使用します。
Estimated Index Size = (Number of Documents) x (Avg. Size of Indexed Text per Doc) x (Expansion Factor)
展開係数は重要であり、トークン化戦略に大きく依存します。これらの乗数をガイドとして使用します。
ユースケース | 乗数 |
---|---|
標準/言語トークン化 |
|
キーワード/簡易トークン化 |
|
EdgeGram(オートコンプリート) |
|
nGram(部分一致) |
|
注意
上記の展開係数乗数は一般的な例を表しており、すべてのテキスト ベースのコンテンツに適用されるとは限りません。配置のインデックス計算を決定するには、必ず独自のデータでテストしてください。
不安定を防ぐためのメモリ消費の管理
- 静的マッピングの使用
- ドキュメント構造が予測できない場合は、動的マッピングを無効にします。動的マッピングは「マッピングの急増」につながり、数千の意図しないフィールドが作成され、 RAMが過剰に消費され、不安定になります。
dynamic: false
を使用してインデックスを明示的に定義します。詳しくは、「 静的マッピングと動的マッピング 」を参照してください。 - 保存されたソースフィールドの制限
mongot
インデックス自体には、検索結果に必要な最小限のフィールド セットのみを保存します。MongoDB のプライマリコレクションからフィールドを取得すると、インデックスで使用されるディスク容量が削減されることが多いです。詳しくは、「 MongoDB Search インデックスに保存されたソース フィールドの定義 」を参照してください。- 高メモリ機能を考慮する
- シノニム コレクションと深くネストされたembeddedDocumentは、重大なメモリ アーティファクトを生成することに注意してください。これらの機能を頻繁に使用する場合は、
mongot
プロセスにより多くのJavaヒープ領域を割り当てる必要があります。
インデックス作成ワークロード
書込み (write) のレートとタイプ(挿入、更新、削除)によって、検索インデックスがデータベースと同期され続けるために必要な CPU と ディスク IOPS が決まります。
書込みスループットとメンテナンス用にプロビジョニングするには、次の手順に従います。
レプリケーションラグの最小化
- インデックスの集約
- 単一のコレクションに複数の個別の検索インデックスを定義しないでください。各インデックスはオーバーヘッドを追加します。代わりに、単一で包括的なインデックス定義を作成します。
- 複雑なビューのマテリアライズド
- 複雑なビューをインデックス化している場合、変更ストリームのパフォーマンスが制約される可能性があります。
mongot
がインデックスを作成するために、シンプルで事前集計されたデータソースを提供するために、マテリアライズドビューを作成することを検討してください。
クエリ ワークロード
クエリパフォーマンスは、主に処理用の CPU とキャッシュ用のRAMの関数です。クエリの複雑さと量によって、レイテンシターゲットを満たすために必要なリソースが決まります。
クエリ パフォーマンスに必要な配置サイズを見積もるには、次の手順を行います。
低レイテンシのためにRAMを割り当てる
RAM は、高速クエリにとって最も重要な要素です。
- 全文検索
- 目的は、インデックスの多くをオペレーティング システムのファイルシステムキャッシュにできるだけ多く含めることです。最適なパフォーマンスを得るには、ディスク上のインデックスの合計サイズと一致するように十分なRAM を
mongot
ノードにプロビジョニングします。これにより、低速ディスク読み取りが最小限に抑えられます。 - ベクトル検索
- 低レイテンシのベクトル検索の場合、HNSWグラフインデックスがメモリ内に存在する必要があります。最小必要RAMを計算するには、インデックスサイズ推定手順の手順を使用し、オーバーヘッドに 20-25% のバッファを追加します。ベクトルインデックスがRAMに収まらない場合、クエリレイテンシが増加します。
注意
RAM要件を減らすには、ベクトル量子化の使用を検討します。ベクトル量子化によりベクトル埋め込みが圧縮されるため、メモリのフットプリント(およびそれを保持するために必要なRAM )が低下し、再現率や精度への影響が最小限に抑えられます。