書き込み操作のパフォーマンス
Indexes
コレクションの各インデックスは、書込み操作のパフォーマンスにある程度のオーバーヘッドを追加します。
MongoDB では、コレクションに対する insert
またはdelete
の書込み操作ごとに、ターゲット コレクション内の各インデックスから対応するドキュメントキーが挿入または削除されます。 update
操作により、アップデートの影響がキーに及ぶことで、コレクションのインデックス サブセットがアップデートされる場合があります。
一般に、インデックスによって得られる読み取り操作のパフォーマンス向上は、挿入ペナルティに見合う価値があります。ただし、可能な場合は書込みパフォーマンスを最適化するために、新しいインデックスを作成するときは注意し、既存のインデックスを評価して、クエリが実際にこれらのインデックスを使用していることを確認してください。
インデックスとクエリについては、「クエリの最適化」を参照してください。インデックスについて詳しくは、「インデックスとインデックスの作成戦略」を参照してください。
ジャーナリング
クラッシュが発生した場合に耐久性を確保するために、MongoDB はディスク上の ジャーナルへの 先行書込みログ を使用します。MongoDB は、メモリ内の変更をまずディスク上のジャーナル ファイルに書込みます。MongoDB がデータ ファイルへの変更をコミットする前に終了したりエラーが発生したりした場合、MongoDB はジャーナル ファイルを使用してデータ ファイルへの書込み操作を適用できます。
通常、ジャーナルによって提供される耐久性の保証は追加の書込み操作のパフォーマンス コストを上回りますが、ジャーナルとパフォーマンスの間の次の相互作用を考慮する必要があります。
ジャーナルとデータ ファイルが同じブロック デバイス上に存在する場合、データ ファイルとジャーナルは、使用可能な I/O リソースの有限の数をめぐって競合する必要がある場合があります。ジャーナルを別のデバイスに移動すると、書込み操作の容量が増加する可能性があります。
アプリケーションが書込みに関する考慮事項を指定し、その中に
j option
が含まれている場合、mongod
によってジャーナルへの書込み間隔が短くなり、全体的な書込み負荷が増加する可能性があります。ジャーナル書込み間隔は、
commitIntervalMs
ランタイムオプションを使用して設定できます。ジャーナル コミットの間隔を短くすると書込操作の数が増え、MongoDB の書込み操作のキャパシティーが制限される可能性があります。ジャーナル コミットの間隔を長くすると、書込み操作の合計回数が減る可能性がありますが、障害が発生したイベントにジャーナルが書込み操作をレコードしない可能性も高くなります。
ジャーナリングについて詳しくは、「ジャーナリング」を参照してください。