2つのセカンダリを持つmongo 3.4.7(WiredTiger)レプリカセットを実行しています。
docs によると、ジャーナリングが有効で書き込みの懸念がある場合は{w: "majority", j: 0}
、データが「メモリ内」に書き込まれた後にackが送信されます。
ただし、ドキュメントでは、ジャーナリングがサーバー上でoffのときに何が起こるかは指定されていません(--nojournal
)。その場合はどうなりますか?書き込みの懸念は何を待っていますか?
WiredTigerでMongoDB 3.4.7を使用しているので、MongoDBをデフォルト値(ジャーナルが有効になっている)で実行すると、特定のデフォルトが設定されます。
{w:1}
( 懸念事項を書く を参照){w:'majority'}
、デフォルトは{j:true}
デフォルトでジャーナルが有効になっている場合( writeConcernMajorityJournalDefault を参照)ジャーナリングなしでMongoDBを実行する場合は、{w:'majority', j:true}
はエラーになります( jオプション の「メモ」セクションを参照):
[PRIMARY:replset] test> db.test.insert({a:1},{writeConcern:{w:'majority', j:true}})
WriteResult({
"writeError": {
"code": 2,
"errmsg": "cannot use 'j' option when a Host does not have journaling enabled"
}
})
直感に反して、WiredTigerを--nojournal
オプションはそれを遅くするかもしれません。これは、WiredTigerが checkpoint を60秒ごとに実行するか、MongoDB 3.4で2 GBのデータを実行し、チェックポイント間でジャーナルに書き込むためです。
ジャーナリングを無効にすると、ジャーナルのフラッシュが強制的にチェックポイントになります。ジャーナルの同期は完全なチェックポイントに比べて比較的軽いため、強制チェックポイントはWiredTigerの速度を低下させます。
あなたの質問への答え:ディスクへのデータ変更の書き込み。
ジャーナリングがオンの場合、最初の変更はジャーナルに書き込まれ、次にデータブロックに書き込まれます。