writeConcern決定一個寫操做落在多少個節點上纔算成功。writeConcern的取值包括:shell
1~集羣最大數據節點數:寫操做須要被複制到指定節點數纔算成功;異步
w默認行爲性能
db.test.insert({count:1})
默認只寫入主節點一個。大數據
甚至默認狀況下都不用寫到盤裏,內存裏寫完就返回了。code
以下圖所示,解釋一下實現表示完成操做,虛線表示會異步進行結果就不保證了。blog
w: "majority" 大多數節點確認模式【推薦】內存
db.test.insert({count:1},{writeConcern:{w:"majority"}}) db.test.insert({count:1},{writeConcern:{w:3}}) db.test.insert({count:1},{writeConcern:{w:4}})
w: "all" 所有節點確認模式同步
弊端就是有一個節點掛了就會一直阻塞。it
j:trueio
conf=rs.conf() conf.members[2].slaveDelay=5 # 延遲同步 conf.members[2].priority=0 # 關掉選舉, 由於上一步設置了延遲同步,這個地方必須設置關掉;否則報錯。 rs.reconfig(conf)
writeConcern 能夠決定寫操做到達多少個節點纔算成功,journal 則定義如何纔算成功。
取值包括:
觀察複製延遲下的寫入,以及 timeout 參數
db.test.insert({count:1},{writeConcern:{w:3}}) db.test.insert({count:1},{writeConcern:{w:3,wtimeout:3000}}) # 爲了防止節點掛掉,一直阻塞,能夠設置返回一個超時的警告。 # 可是要注意,數據實際上寫進去了,這裏只是警告!!