本文翻譯自 Write Concern for Replica Sets。
注意,本文內容適用於MongoDB Manual 3.0.2及以上版本。mongodb
從客戶端應用的角度來看,MongoDB實例是以單臺服務器(standalone模式)仍是副本集模式運行,這點是透明的。不過,副本集針對寫操做提供了一些配置選項。[1]服務器
[1] 分片集羣——在其中分片也是副本集——提供了相同的讀寫操做相關的配置選項。翻譯
對於副本集,默認寫關注級別只會確認主節點上的寫操做。然而,你能夠覆蓋默認寫關注,以在指定數量的副本集成員上確認寫操做。(注:寫關注的默認配置是什麼?如何查看默認配置?)code
要覆蓋默認寫關注,每次寫操做要指定寫關注級別。例如,下面的方法包含一個寫關注,它明確指出該方法只有在寫操做傳播至主節點和至少一個從節點以後,或者方法5秒後執行超時 纔會返回。ci
db.products.insert( { item: "envelopes", qty : 100, type: "Clasp" }, { writeConcern: { w: 2, wtimeout: 5000 } } )
你能夠爲寫關注指定一個超時閾值。這會防止寫操做無窮盡地阻塞下去,若是寫關注沒法實現的話。例如,若是寫關注要求四個副本集成員的確認,但副本集只有三個可用成員,那麼操做就會阻塞,直到那些成員變得可用。get
請參考 wtimeout、Write Method Acknowledgements。qt
你能夠修改副本集的默認寫關注,經過設置副本集配置中的getLastErrorDefaults。下面的一系列命名建立了一個配置,它會等待寫操做在大部分投票節點上完成之後再返回:string
cfg = rs.conf() cfg.settings = {} cfg.settings.getLastErrorDefaults = { w: "majority", wtimeout: 5000 } rs.reconfig(cfg)
若是你發起一個使用特定級別寫關注的寫操做,它就會使用當前你指定的,而非默認的。it
使用不適合的/不勝任(insufficient)的寫關注會致使在副本集failover時發生回滾。請老是確保你的操做指定了你的應用須要的寫關注。還可參考 Write Concern 和 Write Concern Options。io
你能夠給副本集成員打標籤,而後使用產生的標籤集來建立自定義的寫關注。參考 Configure Replica Set Tag Sets 獲取使用標籤集配置自定義寫關注的更多信息。