特定の 1 ビットのデータを mongo レプリカ セットに書き込む必要があり、それが安全であることを確認する必要があります (これは法的要件です)。大部分のノードでディスクへの書き込みをカプセル化する標準の WriteConcern はありますか? MAJORITY_FSYNCED のようなもの。
私が思いついた最高のものは次のとおりです-これは有効ですか?
WriteConcern replicaSetFsyscToMajority = new WriteConcern.Majority(0, true, false);
Java ドライバーの WriteConcern クラスの事前定義されたレベルを見ると、私が知る限り、既存のレベルのどれも私が求めているものではないようです。
FSYNCED は、プライマリのみのディスクへの安全な書き込みを意味します。(そのため、プライマリ ノードでメルトダウンが発生すると、書き込みが失われる可能性があります)
REPLICAS_SAFE は、書き込みが少なくとも 2 つのレプリカによって確認され、必ずしもディスクではなくメモリに書き込まれたことを表しているようです (したがって、mongo レプリカ セット全体の電源を切ると、書き込みが失われる可能性があります)。MAJORITY は似ていますが、((n/2) + 1) レプリカです。
補足事項・コメント
- Java 7 で Java ドライバー 2.11.2 を使用しています。
- 明らかに、これらの非常に安全な書き込みでは、パフォーマンスが低下しますが、これには満足しています (または、より正確には、負荷が十分に低いため、時期尚早の最適化です)。
- データベースに書き込めない場合は、再試行できますが、それが失敗した場合は、DB の書き込みなしで続行するよりも、ユーザーの旅を中止する方が良い* :( 私が言ったように、これは法的要件です.
*より良いの特定の定義について!
編集:これまでに試したこと...
以下を使用してみました:
new WriteConcern.Majority(0, true, false)
エラーは発生しないと言えます (読み取りと書き込みが可能で、すべてのテストに合格します)。書き込みが十分に検証されているかどうかはわかりません。また、パフォーマンスのプロファイリングも行っていません。