最善の策は、書き込みの懸念事項を使用することです。これにより、MongoDBにデータの重要性を伝えることができます。最も速い書き込みの懸念も最も安全性が低くなります。データは、次にスケジュールされたフラッシュまでディスクにフラッシュされません。最も安全なのは、データが戻る前に、多くのマシンのディスクに書き込まれたことを確認することです。
あなたが探している書き込みの懸念はFSYNC_SAFEです(少なくとも、Javaドライバー )またはREPLICAS_SAFEは、データが複製されたことを確認します。
MongoDBには従来の意味でのトランザクションがないことに注意してください。これを行うようにMongoデータベースに指示することはできないため、ロールバックは手動でロールバックする必要があります。
もう1つ行う必要があるのは、比較的新しい<code>-journalを使用することです。 オプション(ログ先行書き込みを使用)、またはレプリカセットを使用して多くのマシン間でデータを共有し、クラッシュ/電源喪失の場合にデータの整合性を最大化します。
シャーディングは、特に大きなデータセットを処理するときに負荷を共有する方法として、ハードウェア障害に対する保護ではありません。シャーディングを、複数のマシン上の複数のディスクにデータを書き込む方法であるレプリカセットと混同しないでください。 。
したがって、データの価値が十分にある場合は、必要な復元力を提供するために、レプリカセットを使用する必要があります。おそらく、他のデータセンター/可用性ゾーン/ラックなどにスレーブを配置することもできます。
マスターがダウンした場合に選択された新しいマスターが同じデータ内の1つになるように、レプリカセット内の個々のノードの優先度を指定する方法があります(これがまだ実装されているかどうかは覚えていません)。そのようなマシンが利用可能な場合は中央に配置します(つまり、他の唯一のオプションでない限り、国の反対側のスレーブがマスターになるのを阻止します)。