sql >> データベース >  >> NoSQL >> MongoDB

MongoDBジャーナリングを有効にする必要がありますか?

    MongoDBは、ディスク上のジャーナルを使用して、書き込み操作を保証し、クラッシュの復元力を提供します。 MongoDBは、書き込みごとに、正確なディスクの場所と書き込みで変更されたバイトを含むジャーナルも作成します。したがって、サーバーでクラッシュが発生した場合、ジャーナルを使用して、データファイルにまだ書き込まれていない書き込みを再生できます。

    MongoDBは、メモリマップトファイルを使用してデータをディスクに書き込みます。デフォルトでは、MongoDBデータファイルは60秒ごとにディスクにフラッシュされます。また、ジャーナルにメモリマップトファイルを使用し、デフォルトでは、ジャーナルは100ミリ秒ごとにディスクにフラッシュされます。最終的なデータファイルは60秒ごとにディスクにフラッシュされるため、ジャーナルは1分を超えて書き込みを追跡する必要はありません。ジャーナルの仕組みの詳細については、公式ドキュメントを参照してください。ビューマッピングがどのように機能するかをより詳細に理解するには、Kristinaのブログをチェックしてください。

    Journaling Write Concern

    >db.data.insert({"name":"testentry"});
    >db.runCommand({"getLastError":1, "j":true});
    

    MongoDBジャーナリングをオンにすると、MongoDB操作の「ジャーナリング」の書き込み懸念をMongoDBで指定することもできます。これは、MongoDBがジャーナルにコミットした後にのみ書き込み操作を確認することを意味します。ただし、これには欠点があります。getLastErrorで「j」:trueを指定すると、MongoDBはジャーナルデータをコミットする前に、ジャーナルコミットの約1/3を内部で待機します。デフォルトのジャーナルコミット間隔は100ミリ秒です。したがって、MongoDBは30ミリ秒待機してデータをコミットします。これは基本的に、単一のスレッドでは1秒あたり約33.3の書き込みしか取得できないことを意味し、推奨されるベストプラクティスは書き込みをバッチ処理することです。たとえば、書き込みが50回ある場合は、最後の書き込みでのみ「j」:true設定を使用します。これにより、前の50回の書き込みがすべて完了したことが確認されます。

    概要

    すべての本番MongoDBインスタンスは、ジャーナリングを有効にして実行する必要があります。ジャーナリングを有効にしておらず、サーバーまたはMongoDBプロセスがクラッシュした場合、MongoDBはデータの整合性を保証できません。データベースで「修復」操作を実行する必要があります。これは、データの量によっては、完了するまでに数時間かかる場合があります。自分が何をしているかを本当に理解している場合にのみ、オフにしてください。 ScaleGridでは、すべてのインスタンスがMongoDBのベストプラクティス構成に従い、デフォルトでジャーナル処理がオンになっています。


    1. MongoDB\uXXXXの問題

    2. $lookup集約演算子でシャーディングを使用するMongoDB

    3. マングースがネストされたオブジェクトを保存しない

    4. MongoDB $ ifNull