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