今天開始事務的學習,要學習的章節爲《19 | 事務開發:寫操做事務》,其實主要就是講一個參數writeConcern。安全
以前第一章咱們學過,生產環境中MongoDB最少也是須要一個3結點的集羣的。那麼writeConert就是用於控制在數據寫入時,數據寫入多少個結點纔算成功。網絡
> db.test.insert({count: 1}, {writeConcern: {w: 3})
• 雖然多於半數的 writeConcern 都是安全的,但一般只會設置 majority,由於這是等待寫入延遲時間最短的選擇;
• 不要設置 writeConcern 等於總節點數,由於一旦有一個節點故障,全部寫操做都將失敗;
• writeConcern 雖然會增長寫操做延遲時間,但並不會顯著增長集羣壓力,所以不管是否等待,寫操做最終都會複製到全部節點上。設置 writeConcern 只是讓寫操做等待複製後再返回而已;
• 應對重要數據應用 {w: 「majority」},普通數據能夠應用 {w: 1} 以確保最佳性能。性能
須要搭建一個3節點的測試環境學習
db.test.insert( {count: 1}, {writeConcern: {w: "majority"}}) db.test.insert( {count: 1}, {writeConcern: {w: 3 }}) db.test.insert( {count: 1}, {writeConcern: {w: 4 }})
conf=rs.conf() conf.members[2].slaveDelay = 5 conf.members[2].priority = 0 rs.reconfig(conf)
db.test.insert( {count: 1}, {writeConcern: {w: 3}}) db.test.insert( {count: 1}, {writeConcern: {w: 3, wtimeout:3000 }})
今天主要學習了寫操做中,writeConcern參數的使用方法,建設設置爲 majority,這也是系統的默認值,保證大多數結點寫入數據的成功。測試