MongoDBでのジャーナリングを理解する



ブログでは、MongoDBでのジャーナリングについて簡単に説明しています。

Mongod書き込み操作の操作

Mongodは主に、共有ビューのメモリで書き込み操作をホストします。実際のディスクにメモリマッピングがあるため、共有と呼ばれます。





たとえば、ユーザーのデータファイルはデータddに保持され、メモリマッピングがあります。ここでは、最初にすべてのデータをメモリにプッシュし、指定された間隔の後、データをメモリにフラッシュします。これは60秒ごとに発生し、ユーザーはこのプロセスに影響を受けません。

ここでは、このプロセスはジャーナルなしオプションと呼ばれます。これは、メモリからディスクにデータを保存するために60秒の遅延がある場合、または突然のシャットダウンがある場合、メモリ内のデータが取得されない可能性があることを意味します。したがって、ジャーナリングはここで関連するようになります。



ジャーナリングはバージョン2.4.10より前ではデフォルトで無効にされていましたが、その後は有効になっていることを知っておくことが重要です。

mongodプロセスが開始された瞬間に、次のステートメントを確認できます。

Journal dir = D:Rana2custom datajournal



ここで、ジャーナルディレクトリはデータディレクトリ内の子ディレクトリであり、デフォルトで有効になっています。

MongoDBのジャーナリングとは何ですか?

このプロセスでは、mongodで書き込み操作が発生し、プライベートビューに変更が加えられます。最初のブロックはメモリで、2番目のブロックは「マイディスク」です。 「ジャーナルコミット間隔」と呼ばれる指定された間隔の後、プライベートビューはそれらの操作をジャーナルディレクトリ(ディスクにある)に書き込みます。

ジャーナルのコミットが発生すると、mongodはデータを共有ビューにプッシュします。プロセスの一部として、共有ビューから実際のデータディレクトリに書き込まれます(このプロセスはバックグラウンドで行われるため)。基本的な利点は、サイクルが60秒から200ミリ秒に短縮されたことです。

マップ側がハイブに参加します

いずれかの時点で早期剥離が発生するか、フラッシュディスクが最後の59秒間使用できないままであるシナリオでは(ジャーナルディレクトリ/書き込み操作の既存のデータを念頭に置いて)、次にmongodが起動すると、基本的にすべての書き込み操作が再生されます実際のデータディレクトリにログを記録して書き込みます。

使い方?

ここでは、コミットが発生すると、同じ操作が共有ビューで再生され、60秒後にフラッシュディスクが発生します。

フラッシュされた後、データが処理されます。ここのデータは、ジャーナルディレクトリで処理済みとしてマークされます。つまり、60秒ごとに、コピーしたデータとジャーナルから削除されるはずのデータをチェックします。

ジャーナリングの使用はログの使用に似ています。その理由は、耐久性を高めるために書き込み操作ログを作成するためです。ジャーナリングは一時的なストレージです。つまり、書き込み操作ログのみを保留中のジャーナルディレクトリに保持します。また、共有ビューにはデータがありますが、ジャーナルディレクトリには操作があります。

たとえば、ユーザーがジャーナリングなしでデータを書き込んでいる場合、どのデータが書き込まれたとしても、そのメモリマッピングにより、ユーザーはデータが書き込まれた場所を知ることができます。

プライベートビューと共有ビュー間のリンク

コミットが発生すると、ジャーナルディレクトリでプロセスとしてマークされ、共有/プライベートビューの現在のビューに対して別のマッピングが行われます(データ共有なし)。

グラフでは、青い項目はすべてRAM(ランダムアクセスメモリ)にあり、サフランはディスクを示しています。

場合によっては、データがデータディレクトリにフラッシュされていないが、書き込み操作がデータディレクトリにある場合、mongodは再処理し、書き込み操作をデータディレクトリに適用します。

注意すべき重要な点は、ジャーナルがコミットされる前にクラッシュが発生するシナリオでは、添付200ミリ秒以内に失われます。

Pythonでの印刷とは

また、ジャーナルディレクトリには、実際の操作を記述し続けることに注意してください。

次のようなステートメントの例では ‘db.class.insert’ これは挿入操作であり、データはクラス操作に挿入されます。したがって、クラス操作は実際には残りませんが、操作は存在します。

ジャーナルの使用が遅れると、パフォーマンスに影響を与えることにも注意する必要があります。

非同期プロセスとしてバックグラウンドでジャーナリングを使用し、同期的に操作で何も実行しないようにすることもできます。ジャーナリングは本番環境でも推奨されます。

次に、「200ミリ秒」のジャーナルコミット間隔の時間枠を構成できます。これは、「– –ジャーナルコミット間隔」で3〜300ミリ秒の範囲で有効にできます。これはすべて、機能していない要件(書き込みが発生する頻度とジャーナルディレクトリに書き込みたい頻度)。大量の書き込み操作が行われている場合は、ミリ秒を短くすることをお勧めします。

プライベートは共有ビューにマップされるため、プライベートビューは実際のデータを保持することにも注意してください。ここでの共有ビューは、データディレクトリにフラッシュします。

オブジェクトを配列phpに変換します

このプロセスで得られる利点は、サーバーがクラッシュし、フラッシュに書き込む必要のあるデータがない場合に、mongodを再起動する次のサーバーがジャーナルディレクトリの回復をチェックすることです。データディレクトリでの操作を回復、再生、書き込みしてから起動します。

質問がありますか?コメントセクションでそれらに言及してください。折り返しご連絡いたします。

関連記事: