2011-12-15 32 views
0

MongoDB的具有可配置的持久性:當進行更新操作,你可以指定一個「寫關注」告訴你想要的更新只能算是完整的系統時,數據有(例如)被寫入到磁盤,並複製到X奴隸。MongoDB的寫入問題是否會保證以前的寫入?

有沒有關於不是當前更新的任何種類的保證,而是在它之前的寫入?如果我想更新三個文檔,是否必須標記所有這些文檔的昂貴編寫問題,還是隻用最後一個操作就可以發佈它?

還有,就是這個道理受使用連接池(即正在做了三個不同的連接的三次更新)和分片(即影響不止一個碎片的三次更新)?

回答

1

如果您使用的多次寫入,GetLastError函數爲J,安全,FSYNC是成功返回將指示最後一次操作之前,前面的操作得到保存/複製到其他服務器已經標誌相同的連接。

但是,如果那些先前的操作失敗以任何理由,你不知道這件事,如果你不調用GetLastError每個操作。但是,如果您的寫入是從不同的連接發送的,則不能保證所有操作都保存到磁盤/複製到其他服務器。

+0

這是否第一款也是分片到位時應用? – Thilo

+0

不,它在mongos不 – Nat

+0

GetLastError函數()如果集羣中的所有寫操作成功,將成功 - 即,GetLastError()將阻塞,直到所有的碎片都滿足寫入關注。發生的第一個錯誤將被返回,否則。 – brandon10gen