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