最好的辦法是用寫的擔憂 - 這允許你告訴MongoDB中多麼重要的一塊數據是。最快的Write Writen也是最不安全的 - 在下一次預定的刷新之前,數據不會刷新到磁盤。最安全的將確認數據在返回之前已經被寫入到多個機器上的磁盤上。
您正在尋找的寫入問題是FSYNC_SAFE(至少這是從Java driver的角度調用的)或REPLICAS_SAFE,它確認您的數據已被複制。
記住,MongoDB中沒有傳統意義上的交易 - 你的回退將不得不用手卷起因爲你不能告訴Mongo的數據庫來爲你做這個。
您需要做的另一件事是使用相對較新的--journal
選項(使用Write Ahead Log),或使用副本集在多臺機器上共享數據,以便在發生崩潰/電力損失。
分片並不是一個防止硬件故障的方法,因爲在處理特別大的數據集時共享負載的方法 - 分片不應該與副本集混淆,這是一種將數據寫入多個磁盤的方式多臺機器。
因此,如果您的數據足夠有價值,那麼您肯定應該使用副本集,甚至可能在其他數據中心/可用性區/機架等中安裝從屬設備,以提供您所需的彈性。
有一個方法可以指出副本集中各個節點的優先級,這樣,如果主服務器出現故障,那麼當選的新主服務器就是一個如果這樣一臺機器可以在同一個數據中心(即成爲主停止在該國的另一側的奴隸,除非它真的是唯一的選擇)。
非常感謝您的回覆。我會等待一段時間的其他回覆,如果我沒有發現任何新內容,我會接受它,謝謝 –
tl; dr:你搞砸了! – Mrchief