標籤:16px log b2c size sdn 處理 neu last 接收
write concern保證了mongodb寫操作的層級,不同的write concern設定相應了不同層級的寫操作。設定的層級越高。那麼寫操作的效能的持久化做得越好,可是寫效能也就越差。
mongodb預設採用?Acknowledged的write concern層級,這也是安全性最高的層級。
在?Acknowledged層級的複本集模式下。mongodb可在client設定一個wtimeout值。假設在規定的時間內無法完畢這個寫操作就返回一個錯誤,即使它終於可能能夠完畢。
Write Concern Levels
Unacknowledged
在Unacknowledged模式下,mongodbserver不會去確認寫操作是否真正收到了,相似於忽略了所以操作。然而,磁碟機還是會嘗試接收和處理來自網路的錯誤,這就取決於系統的網路設定了。是Unacknowledged層級的原理圖。
AcknowledgedAcknowledged模式下,mongod會去確認它接收到了這個寫操作而且將這個寫操作應用到記憶體資料中。Acknowledged?模式執行client捕捉全部網路錯誤。主鍵衝突等錯誤。
可是Acknowledged?並不能保證寫操作應用到磁碟資料總。下面是原理圖
JournaledJournaled模式下。mongodbserver會確認寫操作提交到journal log中。所以這個層級能夠保證mongodb能夠在意外宕機以後恢複出全部資料。
當然這個層級必須保證你在server端開啟了journaling 。而且每次都必須等待直到下一次journal log的提交,這時你能夠嘗試增大journal log的commit頻率。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />
Replica Acknowledged假設你們的mongodb用到了複本集,寫操作也許就須要額外的考慮,預設的設定僅僅要求了主節點的Acknowledged。而在Replica Acknowledged模式下。它會保證全部的寫操作都應用到複本集中的全部節點中,只是這裡的journal log僅僅須要保證主節點的journal log commit就能夠了。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />
Available Write Concern每次寫操作後driver都會自己主動調用getLastError()命令來推斷是否發生了寫錯誤以及是否依照設定的writeconcern以後執行,比如db.runCommand( { getLastError: 1, w: 2,j:true, wtimeout:5000 } )就是確認上一次的操作w為2,j為true,wtimeout為5000時,有沒有報錯。而db.things.insert({dd:123},{writeconcern:{w:2}})是設定當前插入的SQL的writeconcern。?db.setWriteConcern({w:1,wtimeout:3000,j:1})是設定當前的db的writeconcern值;
?db.getWriteConcern()是擷取當前db的write concern設定;
w?Option1 預設配置,確保單一實例mongod或複本集中的主節點在寫操作時acknowled0 全部的都沒有acknowled,可是這時你假設設定了journal commit?acknowled的話,那麼寫操作依然是acknowled模式N 首先N>1,N的值表示在複本集中包含主節點在內的須要acknowled的節點數量majority 保證複本集中大多數節點acknowled
<tag set> 保證這個目標複本集的全部節點acknowledj?Optionj操作確保寫操作的資料應用到磁碟上的journal log,值true表示開啟,flase表示關閉。複本集中設定為true僅僅能保證主節點上的寫操作應用到磁碟的journal log。wtimeout這個值僅僅針對w的值設定為大於1的場合有效,即僅僅針對複本集環境有效。當發生逾時時就會返回一個錯誤,即使終於資料write成功了。這時mongodb不會復原已經改動成功的資料。
該值設定為0就是不做限制。
mongodb官網文檔閱讀筆記:write concern