摘要:對于多文檔操作來說,并未提供多文檔事物或隔離。在間隔過期之前,不會回滾或撤消已做出的修改。僅在將數(shù)據(jù)提交到后才告知客戶端。為了降低操作延遲,也增加了它提交數(shù)據(jù)至日志的頻率。
What"s write concern本文翻譯自 write concern。
注意,本文內(nèi)容適用于MongoDB Manual 3.0.2及以上版本。
所謂的寫關(guān)注就是當向客戶端報告寫操作的成功執(zhí)行時,MongoDB提供的保證。通過提供不同級別的寫關(guān)注來解決應用的具體需求。
Considerations Default Write Concernmongo shell和MongoDB驅(qū)動使用acknowledged作為默認寫關(guān)注級別。
Read Isolation注:讀與寫如何隔離?寫與寫如何隔離?
在將這些修改提交至磁盤之前,MongoDB允許客戶端讀取剛插入或修改的文檔,不管寫關(guān)注的級別或日志(journaling)配置。其結(jié)果是,應用可以觀察到兩類行為:
對于有多個并發(fā)讀取者和寫入者的系統(tǒng)來說,在寫操作返回之前,MongoDB允許客戶端讀取寫操作的結(jié)果。
如果在提交數(shù)據(jù)至日志(journal)之前mongod進程終止了,那么即使寫操作成功返回了,查詢?nèi)钥赡茏x取到 在mongod重啟后 并不存在的數(shù)據(jù)。
其他數(shù)據(jù)庫系統(tǒng)稱這些 隔離語義(isolation semantics) 為read uncommitted。對于所有的插入和更新,MongoDB以隔離方式修改每一個文檔:客戶端從不會看到中間狀態(tài)的文檔。對于多文檔操作來說,MongoDB并未提供多文檔事物或隔離。
當以單機方式(standalone)方式部署的mongod從使用journaled寫關(guān)注的寫操作中返回時,數(shù)據(jù)就完全提交至磁盤了,重啟mongod后它們就可用了。
對于副本集,只有在 在副本集的大部分投票節(jié)點上寫操作被復制且提交數(shù)據(jù)至日志 之后,寫操作才是持久的。MongoDB會定期(regularly)提交數(shù)據(jù)至日志,不管journaled寫關(guān)注:使用commitIntervalMs去控制mongod多長時間提交一次數(shù)據(jù)。
Timeouts客戶端可以設置一個wtimeout值,作為replica acknowledged寫關(guān)注的一部分。如果在指定的時間間隔內(nèi)寫關(guān)注未被滿足,當前操作就會返回錯誤,即使寫關(guān)注最終成功完成。
在wtimeout間隔過期之前,MongoDB不會回滾或撤消已做出的修改。
Write Concern LevelsMongoDB有下面這些概念性的寫關(guān)注等級,由弱到強:
(注:下面這些只是邏輯概念上的寫關(guān)注級別,并非配置write concern時剛好有這幾個配置枚舉值可選。實際上寫關(guān)注包含兩個方面,分別對應兩個配置項:w和j,需要組合這兩個配置項來實現(xiàn)下面這些寫關(guān)注級別。具體請看Write Concern Reference。)
unacknowledgedMongoDB不會告知客戶端寫操作已收到。unacknowledged類似于error ignored。然而,驅(qū)動程序在可能的時候會試圖接收并處理網(wǎng)絡錯誤。但驅(qū)動檢測網(wǎng)絡錯誤的能力有賴于系統(tǒng)的網(wǎng)絡設置。
在Default Write Concern Change勾畫出的發(fā)布(注:此版本已發(fā)布于2012.11)之前,unacknowledged就是默認寫關(guān)注。
acknowledgedacknowledged 也叫 receipt acknowledged。mongod會告知客戶端已收到寫操作,并且已將改變應用于數(shù)據(jù)的內(nèi)存視圖。acknowledged 寫關(guān)注(write concern)允許客戶端捕獲網(wǎng)絡(network)、重復鍵(duplicate key)和其他錯誤。但acknowledged 寫關(guān)注并不會確認寫操作已經(jīng)被持久化到磁盤系統(tǒng)。
從Default Write Concern Change勾畫出的驅(qū)動發(fā)布(注:此版本已發(fā)布于2012.11)開始,MongoDB將默認使用acknowledged寫關(guān)注。
journaledMongoDB僅在將數(shù)據(jù)提交到journal后才告知客戶端。(告知客戶端什么信息呢?)這種寫關(guān)注會確保在關(guān)機或電力中斷后MongoDB能夠恢復數(shù)據(jù)。
你必須啟用journaling以使用這種寫關(guān)注。
使用這種寫關(guān)注,寫操作必須等到下一次日志提交(journal commit)才能返回。為了降低操作延遲,MongoDB也增加了它提交數(shù)據(jù)至日志(journal)的頻率。參考commitIntervalMs文檔以獲取更多信息。
注意:
如果在副本集中需要journaled寫關(guān)注,只需要寫操作在主節(jié)點上完成日志提交就行了,不用考慮replica acknowledged寫關(guān)注。(journaled寫關(guān)注只是一種邏輯上的寫關(guān)注級別,實際并沒有這個配置項值,組合w和j兩個配置項才能實現(xiàn)用戶期望的寫關(guān)注。)
關(guān)于寫關(guān)注,副本集(relica set)提出了額外的考慮因素。默認寫關(guān)注僅要求來自主節(jié)點(the primary)的確認(acknowledgement)。
使用這種寫關(guān)注,你能夠確保寫操作被傳播至副本集中的額外成員,即部分從節(jié)點(the secondary)。參考**Write Concern for Replica Sets **文檔以獲取更多信息。
注意:
如果在副本集中需要journaled寫關(guān)注,只需要寫操作在主節(jié)點上完成日志提交就行了,不用考慮replica acknowledged寫關(guān)注。(journaled寫關(guān)注只是一種邏輯上的寫關(guān)注級別,實際并沒有這個配置項值,組合w和j兩個配置項才能實現(xiàn)用戶期望的寫關(guān)注。)
Write Concern Reference
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/18732.html
摘要:版本中的修改在主從部署中,把視作與是等效的。這會確保如果意外關(guān)閉了,數(shù)據(jù)也不會丟失。當這些寫操作返回時,不會撤銷在寫關(guān)注超過時限之前已經(jīng)成功執(zhí)行的數(shù)據(jù)修改。 Write Concern Reference 本文翻譯自 write concern reference。 注意,本文內(nèi)容適用于MongoDB Manual 3.0.2及以上版本。 寫關(guān)注就是當向客戶端報告寫操作...
摘要:然而,只提供了最簡單的客戶端選項,且不支持多數(shù)據(jù)源配置。由此而生,除了支持完整的客戶端選項及多數(shù)據(jù)源配置之外,還提供了一些其它的實用功能。配置示例多數(shù)據(jù)源進行多數(shù)據(jù)源配置時,需要明確指定各數(shù)據(jù)源的名稱。 最近在制作一個 spring boot 小應用時使用了 MongoDB,鑒于官方庫的簡陋配置,決定自己造個輪子,源碼發(fā)布在 GitHub Carefree MongoDB,jar 已在...
摘要:數(shù)據(jù)模型取決于數(shù)據(jù)庫類型。僅支持位浮點數(shù),所以位整數(shù)會被自動轉(zhuǎn)換為位浮點數(shù)。位浮點數(shù)中的數(shù)字都是這種類型。數(shù)字只能表示為雙精度數(shù)位浮點數(shù)的另外一個問題是,有些位的整數(shù)并不能精確地表示為位浮點數(shù)。 MongoDB學習筆記(1)- MongoDB簡介及數(shù)據(jù)類型 本文所使用的MongoDB版本為 4.0.10 > db.version(); 4.0.10 一、MongoDB 介紹 1. Mo...
摘要:我以為是編碼的問題,可能是下的編碼有問題,因為有一個談論這個問題的。其中遇到了也是的問題提到的這個做法很不錯,使用這個參數(shù)確定位置。 從群里獲取了一個超大的json(也就800M),需要導入mongodb,然后遇到了一個問題: $ mongoimport --db weibo --collection data --file test.json 2018-05-09T16:10:22....
摘要:我以為是編碼的問題,可能是下的編碼有問題,因為有一個談論這個問題的。其中遇到了也是的問題提到的這個做法很不錯,使用這個參數(shù)確定位置。 從群里獲取了一個超大的json(也就800M),需要導入mongodb,然后遇到了一個問題: $ mongoimport --db weibo --collection data --file test.json 2018-05-09T16:10:22....
閱讀 2350·2021-11-15 11:38
閱讀 3563·2021-09-22 15:16
閱讀 1204·2021-09-10 11:11
閱讀 3175·2021-09-10 10:51
閱讀 2962·2019-08-30 15:56
閱讀 2793·2019-08-30 15:44
閱讀 3199·2019-08-28 18:28
閱讀 3537·2019-08-26 13:36