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