mongodb 4.0+多文檔事務的實現原理

1. 副本集事務實現(4.0+)?

  • ?非嚴格依賴二階段提交?
    MongoDB 4.0 在副本集環境中通過 ?全局邏輯時鐘(Logical Clock)? 和 ?快照隔離(Snapshot Isolation)? 實現多文檔事務,事務提交時通過原子性協議(如 Raft 共識算法)協調副本集成員,而非傳統 2PC 模式?。
    事務提交時,主節點將事務操作日志(?oplog 條目?)廣播至副本集成員。成員需通過 ?多數派確認協議?(類似 Raft 的日志復制機制)達成共識,確保日志持久化后才標記事務為已提交?。
  • ?ACID 保障?
    事務操作在提交時通過 WiredTiger 存儲引擎的 MVCC(多版本并發控制)和日志持久化機制,確保原子性和持久性,且讀操作基于一致性快照?。

2. 分片集群事務實現(4.2+)?

  • ?依賴二階段提交?
    4.2 版本引入的分布式事務(跨分片操作)需通過 ?兩階段提交協議? 協調多個分片:
    1. ?準備階段?:各分片節點預提交事務并記錄狀態;
    2. ?提交階段?:事務協調器確認所有分片就緒后,全局提交事務?。
  • ?擴展性優化?
    通過減少跨節點鎖競爭和優化狀態管理,降低 2PC 對性能的影響,但跨分片事務仍存在更高的延遲?

?

然而,MySQL 的 MVCC 機制 ?會保留舊版本數據?,但其實現方式與 MongoDB 存在顯著差異。以下從底層設計、數據存儲與清理角度解釋其工作原理:

3. MVCC 的核心機制:undo log 與版本鏈?
  • ?舊版本數據存儲方式?
    MySQL InnoDB 引擎通過 ?undo log(回滾日志)? 保留舊版本數據。每次更新操作時,原始數據會被復制到 undo log 中形成版本鏈,新數據直接寫入主數據頁?13。
    示例:事務 A 修改某行數據時,該行原始值會被寫入 undo log,新值更新到主數據頁,形成兩個版本。
  • ?版本可見性規則?
    事務通過 ?Read View?(一致性視圖)判斷可見性。每個事務啟動時生成一個 Read View,記錄當前活躍事務 ID 列表,僅能讀取 ?已提交且版本時間戳 ≤ 事務快照時間戳? 的數據?。
  • ?2. 舊版本數據的生命周期?
  • ?臨時性保留?
    舊版本數據僅在 ?活躍事務需要訪問? 時保留。例如,若事務 B 在事務 A 提交前啟動,事務 B 需通過 undo log 讀取事務 A 修改前的舊版本數據?。
  • ?自動清理機制?
    InnoDB 后臺的 ?purge 線程? 會定期清理 ?無活躍事務依賴的舊版本數據?(如 undo log 中已提交且無其他事務引用的舊記錄),避免長期堆積導致存儲膨脹?。
?4. 用戶感知的“未保留舊數據”現象?
  • ?快速清理與隱式存儲?
    由于 undo log 的設計,舊版本數據對用戶透明(不直接體現在數據文件中),且清理效率高。用戶通常感知不到舊版本的存在,誤認為 MySQL 未保留舊數據?。
  • ?與 MongoDB 的差異?
    MongoDB 的 WiredTiger 引擎通過 ?顯式版本鏈? 存儲舊數據(如 B+ 樹多版本節點),而 MySQL 依賴 ?undo log 的日志結構? 實現版本管理,兩者底層存儲方式不同?。

6. MongoDB 事務有沒有像MySQL一樣,實現WAL(Journal 日志) 和oplog 的二階段提交?

因為Journal 和?oplog 沒有能聯系起來的標識位(xid).

?6.1. WAL(Write-Ahead Logging)的作用?
  • ?存儲引擎層持久化?
    MongoDB 的 WiredTiger 存儲引擎通過 WAL(Journal 日志)?實現數據持久化。所有事務操作會先寫入 WAL 日志,確保在崩潰恢復時能通過重放日志恢復未提交的事務或已提交但未落盤的數據?。
  • ?檢查點機制?
    WiredTiger 定期(默認每分鐘)創建檢查點(Checkpoint),將內存中的臟頁(Dirty Page)批量寫入磁盤,并清理已持久化的 WAL 日志,減少恢復時間?。
?6.2. oplog 的副本集同步機制?
  • ?操作日志(oplog)的核心功能?
    oplog 是 MongoDB 副本集的核心組件,記錄所有數據變更操作(如插入、更新、刪除)。事務提交時,主節點將事務內的操作打包為 ?原子性 oplog 條目? 廣播至副本集成員,成員通過重放 oplog 實現數據同步?。
  • ?原子性提交協議?
    事務提交依賴 ?多數派確認機制?(類似 Raft 的日志復制流程),而非傳統 2PC。主節點需等待多數副本集成員確認 oplog 持久化后,才標記事務為已提交,確保數據一致性?。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77279.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77279.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77279.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《理解 Java 泛型中的通配符:extends 與 super 的使用場景》

大家好呀!👋 今天我們要聊一個讓很多Java初學者頭疼的話題——泛型通配符。別擔心,我會用最通俗易懂的方式,帶你徹底搞懂這個看似復雜的概念。準備好了嗎?Let’s go! 🚀 一、為什么我們需要泛型通配符&…

速盾:高防CDN訪問多了會影響源站嗎?

在當今數字化時代,內容分發網絡(CDN)已經成為保障網站性能和用戶體驗的重要工具。特別是高防CDN,它不僅能夠加速內容傳輸,還能有效抵御各種類型的網絡攻擊,確保業務的連續性和穩定性。然而,一些…

Unity URP Moblie AR示例工程,真機打包出來,沒陰影

效果: unity ar示例演示 現象: 真機打包測試私活沒有陰影 Unity版本:2022.3.4f1c1 分析原因: Prefab :ARFeatheredPlane中也有材質,一個用于環境遮擋,一個用于陰影接受。 按理說有啊。 urp …

win10下github libiec61850庫編譯調試sntp_example

libiec61850 https://github.com/mz-automation/libiec61850 v1.6 簡介 libiec61850 是一個開源(GPLv3)的 IEC 61850 客戶端和服務器庫實現,支持 MMS、GOOSE 和 SV 協議。它使用 C 語言(根據 C99 標準)實現&#xf…

Microsoft SQL Server Management 一鍵刪除數據庫所有外鍵

DECLARE ESQL VARCHAR(1000); DECLARE FCursor CURSOR --定義游標 FOR (SELECT ALTER TABLE O.name DROP CONSTRAINT F.name; AS CommandSQL from SYS.FOREIGN_KEYS F JOIN SYS.ALL_OBJECTS O ON F.PARENT_OBJECT_ID O.OBJECT_ID WHERE O.TYPE U AND F.TYPE …

新型多機器人協作運輸系統,輕松應對復雜路面

受到魚類、鳥類和螞蟻等微小生物體協作操縱的啟發,研究人員開發了多機器人協作運輸系統(Multirobot Cooperative Transportation Systems,MRCTS)運輸單個機器人無法處理的重型超大物體,可用于搜救行動、災難響應、軍事…

Framework Binder架構分解

整個 Binder 架構所涉及的總共有以下 5 個目錄: 1. /framework/base/core/java/(Java) 2. /framework/base/core/jni/ (JNI) 3,/framework/native/libs/binder (Native) 4,/framework/native/cmds/servicemanager/ (Native) 5&#xff0c…

騰訊云對象存儲以及項目業務頭像上傳

騰訊云上傳步驟: service-vod模塊化中 ①、參考文檔,引入依賴 ②、配置文件application.properties ③、創建工具類 初始化bean的時候讀取配置文件 Component public class ConstantPropertiesUtil implements InitializingBean{Value("${t…

LeetCode hot 100—括號生成

題目 數字 n 代表生成括號的對數,請你設計一個函數,用于能夠生成所有可能的并且 有效的 括號組合。 示例 示例 1: 輸入:n 3 輸出:["((()))","(()())","(())()","()(())",&…

SpringBoot企業級開發之【文章分類-新增文章分類】

看一下新增文章的需求: 接口文檔: 開發思路: 先在controller下去創建add方法,方法內導入Service類獲取add的結果;再在Service接口下去創建add的方法;然后在Service實現類下去實現方法的作用,且導…

Minecraft盔甲機制詳解(1.9之后)

Minecraft的盔甲有很多種,但是評判盔甲的好壞,通常玩家會使用一個變量來評判——護甲值 護甲值的機制很簡單,一格護甲值 (半個灰色的衣服圖標)最多能提供4%的防御 護甲值在不開作弊的生存模式理論上限是20點&#xf…

為什么要給單片機植入操作系統

給單片機植入操作系統(通常是實時操作系統,RTOS)主要是為了在資源有限的環境中實現更高效、更可靠的多任務管理和系統調度。以下是主要原因和優勢: 1. 多任務并行處理 背景:單片機通常需要同時處理多個任務&#xff0…

Arduino+ESP826601s模塊連接阿里云并實現溫濕度數據上報

ArduinoESP826601s模塊連接阿里云并實現溫濕度數據上報 一、前言二、準備工作三、程序代碼1. Arduino的程序2. ESP826601的程序3. 上面程序需要注意的地方 四、運行結果五、結束語 一、前言 看完我這三篇文章,相信各位朋友對于阿里云物聯網平臺的使用都有了一定的認…

Java 工廠設計模式詳解:用統一入口打造靈活可擴展的登錄系統----掌握 Spring 源碼的基礎第一步

一、前言 在實際開發中,我們經常面臨以下場景: 系統支持多種登錄方式(用戶名密碼、管理員登錄、OAuth 登錄、短信登錄等) 每種登錄方式的認證邏輯不同 我們希望對外提供一個統一的接口調用,而不暴露具體實現 這個…

Windows Acrobat Pro DC-v2025.001.20435-x64-CN-Portable便攜版

Windows Acrobat Pro 鏈接:https://pan.xunlei.com/s/VOO1nMjQ1Qf53dyISGne0c_9A1?pwdsfgn# Acrobat Pro 2024 專業增強版特色 ● 創建和編輯 PDF 文件:可以將各種類型的文檔轉換為 PDF 格式,并進行編輯和修改。 ● 合并和拆分 PDF&#…

【2025“華中杯”大學生數學建模挑戰賽】C題:就業狀態分析與預測 詳細解題思路

目錄 2025“華中杯”大學生數學建模挑戰賽C題 詳細解題思路一、問題一1.1 問題分析1.2 數學模型 1.3 Python代碼1.4 Matlab代碼 二、問題二2.1 問題分析2.2 數學模型 2.3 Python代碼2.4 Matlab代碼 三、問題三3.1 問題分析 四、問題四4.1 問題分析與數學模型 2025“華中杯”大學…

識別法院PDF文件特定字段并插入數據庫【正則表達式+本地化部署】

pdf解析法院協助單特定字段,開源項目,結合若依項目進行開發,不連互聯網,本地開發部署,前端使用vue3技術,后端用若依分離版spring botot技術,實現將pdf法院協助執行通知書中的特定字段如:時間、文…

擁抱健康養生,開啟活力生活

在快節奏的現代生活中,人們愈發重視健康養生。它并非高深莫測的學問,而是融合于日常點滴,對我們的生活有著深遠影響。 合理飲食是健康養生的基石。一日三餐,應遵循營養均衡原則。多攝入蔬菜、水果,它們富含維生素與膳食…

無人機姿態穩定與動態控制模塊概述!

一、設計難點 1. 動態算力需求與硬件能力的不匹配** 無人機邊緣計算設備通常受限于體積和重量,導致其計算單元(如CPU、GPU)的算力有限,難以應對突發的高負載任務(如實時圖像處理、AI推理)。 挑戰&am…

MySQL 臨時表介紹

在 MySQL 數據庫中,臨時表是一種特殊類型的表,它在數據庫會話期間存在,會話結束時自動刪除。臨時表為處理特定的、臨時性的數據操作任務提供了一種高效且便捷的方式。 一、臨時表的創建 使用CREATE TEMPORARY TABLE語句來創建臨時表。其語法…