MongoDB的內部架構,實現事務的原理以及資料同步和分片機制各是什麼?
MongoDB 資料檔案內部結構圖見如下:
1. MongoDB 在資料儲存上按名稱空間來劃分,一個 collection 是一個名稱空間,一個索引也是一個名稱空間
2. 同一個名稱空間的資料被分成很多個 Extent,Extent 之間使用雙向連結串列連線
3. 在每一個 Extent 中,儲存了具體每一行的資料,這些資料也是透過雙向連結連線的
4. 每一行資料儲存空間不僅包括資料佔用空間,還可能包含一部分附加空間,這使得在資料 update 變大後可以不移動位置
5. 索引以 BTree 結構實現
在 MongoDB 中如何實現事務?
第 1 步:先記錄一條事務記錄,將要修改的多行記錄的修改值寫到裡面,並設定其狀態為 init(如果這時候操作中斷,那麼在重新啟動時,會判斷到他處於 init 狀態,從而將其儲存的多行修改操作應用到具體的行上)
第 2 步:然後更新具體要修改的行,將剛才寫的事務記錄的標識寫到它的 tran 欄位中
第 3 步:將事務記錄的狀態從 init 變成 pending(如果在這時候操作中斷,那麼在重新啟動時,會判斷到它的狀態是 pending 的,這時候檢視其所有對應的多條要修改的記錄,如果其 tran 有值,那麼就進行第 4 步,如果沒值,說明第 4 步已經執行過了,直接將其狀態從 pending 變成 commited 了就行)
第 4 步:將需要修改的多條記錄的相應值修改了,並且 unset 掉之前的 tran 欄位
第 5 步:將事務記錄那一條的狀態從 pending 變成 commited,事務完成
在支援事務的 DBMS 中,其事務原子性提交的保證大多都與上面類似。其實事務記錄的 tran 那條記錄,就類似於這些 DBMS 中的 redolog 一樣。
MongoDB 資料如何同步?
MongoDB 採用 Replica Sets 模式的同步流程:
紅色箭頭表示寫操作寫到 Primary 上,然後非同步同步到多個 Secondary 上
藍色箭頭表示讀操作可以從 Primary 或 Secondary 任意一個上讀
各個 Primary 與 Secondary 之間一直保持心跳同步檢測,用於判斷 Replica Sets 的狀態
分片機制見如下圖:
MongoDB 的分片是指定一個分片 key 來進行,資料按範圍分成不同的 chunk,每個 chunk 的大小有限制
有多個分片節點儲存這些 chunk,每個節點儲存一部分的 chunk
每一個分片節點都是一個 Replica Sets,這樣保證資料的安全性
當一個 chunk 超過其限制的最大體積時,會分裂成兩個小的 chunk
當 chunk 在分片節點中分佈不均衡時,會引發 chunk 遷移操作
1. MongoDB 在資料儲存上按名稱空間來劃分,一個 collection 是一個名稱空間,一個索引也是一個名稱空間
2. 同一個名稱空間的資料被分成很多個 Extent,Extent 之間使用雙向連結串列連線
3. 在每一個 Extent 中,儲存了具體每一行的資料,這些資料也是透過雙向連結連線的
4. 每一行資料儲存空間不僅包括資料佔用空間,還可能包含一部分附加空間,這使得在資料 update 變大後可以不移動位置
5. 索引以 BTree 結構實現
在 MongoDB 中如何實現事務?
第 1 步:先記錄一條事務記錄,將要修改的多行記錄的修改值寫到裡面,並設定其狀態為 init(如果這時候操作中斷,那麼在重新啟動時,會判斷到他處於 init 狀態,從而將其儲存的多行修改操作應用到具體的行上)
第 2 步:然後更新具體要修改的行,將剛才寫的事務記錄的標識寫到它的 tran 欄位中
第 3 步:將事務記錄的狀態從 init 變成 pending(如果在這時候操作中斷,那麼在重新啟動時,會判斷到它的狀態是 pending 的,這時候檢視其所有對應的多條要修改的記錄,如果其 tran 有值,那麼就進行第 4 步,如果沒值,說明第 4 步已經執行過了,直接將其狀態從 pending 變成 commited 了就行)
第 4 步:將需要修改的多條記錄的相應值修改了,並且 unset 掉之前的 tran 欄位
第 5 步:將事務記錄那一條的狀態從 pending 變成 commited,事務完成
在支援事務的 DBMS 中,其事務原子性提交的保證大多都與上面類似。其實事務記錄的 tran 那條記錄,就類似於這些 DBMS 中的 redolog 一樣。
MongoDB 資料如何同步?
MongoDB 採用 Replica Sets 模式的同步流程:
紅色箭頭表示寫操作寫到 Primary 上,然後非同步同步到多個 Secondary 上
藍色箭頭表示讀操作可以從 Primary 或 Secondary 任意一個上讀
各個 Primary 與 Secondary 之間一直保持心跳同步檢測,用於判斷 Replica Sets 的狀態
分片機制見如下圖:
MongoDB 的分片是指定一個分片 key 來進行,資料按範圍分成不同的 chunk,每個 chunk 的大小有限制
有多個分片節點儲存這些 chunk,每個節點儲存一部分的 chunk
每一個分片節點都是一個 Replica Sets,這樣保證資料的安全性
當一個 chunk 超過其限制的最大體積時,會分裂成兩個小的 chunk
當 chunk 在分片節點中分佈不均衡時,會引發 chunk 遷移操作
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-1876814/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MongoDB分片儲存的叢集架構實現MongoDB架構
- JiveJdon 的事務處理機制是什麼?
- HashMap的內部實現機制HashMap
- SOA架構和微服務架構的區別是什麼?架構微服務
- MySQL中的事務原理和鎖機制MySql
- oracle事務內部原理Oracle
- 面試官:Redis中集合資料型別的內部實現方式是什麼?面試Redis資料型別
- 單機是最好的架構之二資料同步架構
- 資料庫分散式事務的實現原理!資料庫分散式
- 什麼是微服務架構?什麼是服務註冊與發現微服務架構
- 面試官:Redis中雜湊資料型別的內部實現方式是什麼?面試Redis資料型別
- 事務機制如何實現
- 使用Go的Defer和Rust的Drop實現資料庫事務機制的比較 - DEVGoRust資料庫dev
- 什麼是資料實時同步,為什麼資料實時同步很重要
- PHP是什麼-PHP的架構及原理概述PHP架構
- mysqldump的內部實現原理MySql
- 面試官:Redis中字串的內部實現方式是什麼?面試Redis字串
- 面試官:Redis中列表的內部實現方式是什麼?面試Redis
- 【學習】介面是什麼?實現原理的是什麼?
- 關於爬蟲平臺的架構實現和框架的選型(二)--scrapy的內部實現以及實時爬蟲的實現爬蟲架構框架
- 深入探討微服務架構中的同步通訊機制微服務架構
- 微信域名檢測的機制原理以及實現方式
- 務實的軟體架構師是什麼樣?(tpierrain)架構AI
- HBase 事務和併發控制機制原理
- Elasticserach---寫一致性原理以及quorum機制---以及內部查詢原理AST
- 微服務架構的核心要點和實現原理解析微服務架構
- MongoDB 雜湊分片為什麼資料大小不均勻?MongoDB
- 面試官:Redis中有序集合的內部實現方式是什麼?面試Redis
- MongoDB原理:複製集狀態同步機制MongoDB
- 微服務架構(一):什麼是微服務微服務架構
- 什麼是大資料系統架構大資料架構
- new和instanceof的內部機制
- MongoDB副本集心跳和同步機制MongoDB
- Mysql事務以及加鎖機制MySql
- 什麼是MongoDB,它的優勢和不足以及適用場景是什麼?MongoDB
- MongoDB 分片的原理、搭建、應用MongoDB
- 資料恢復的原理是什麼資料恢復
- SOA— 服務為導向的架構是什麼?架構