標籤:並發控制 poi 配置 redo log 周期性 tran document undo bin
簡介:介紹mongodb的兩種引擎和WAL技術
一 MMAPv1引擎:
前注釋:mmapv1引擎也是隨著版本不斷改進,所以只介紹大體的
1 預設版本引擎: mongodb <3.2
2 鎖層級: 1 Version < 2.2 : 只支援進程級鎖,一個Mongod執行個體一個鎖。
2 2.2 ≤ Version < 3.0 : 支援庫級鎖,一個db一把鎖
3 Version> 3..0 collection層級
3 MVCC : 不支援 多版本並發控制
二 wiredtiger引擎
1 預設版本引擎:mongodb >= 3.2
2 鎖層級: document 層級(table) =》document-level concurrency( 文檔層級的並發)
3 MVCC:支援 多版本並發控制
4 Checkpoint durability (周期性的checkpoint會產生資料集的鏡像,這是災難恢複的基礎)
5 Commit-level durability (開啟WAL(記錄在jonural日誌中)日誌記錄後 對WT資料庫的更新都會先寫log,並進行周期性重新整理,再修改資料,用於災難恢複的根據)
6 恢複機制 :具體策略為
- 每60s做一次checkpoint
- 開啟write ahead log,當log size達到2GB時做checkpoint;並自動刪除不需要的log檔案。
- 每次
commit_transaction時,調用fsync持久化已經commit的log
- 通過 checkpoint+wal日誌記錄 保證了mongodb的資料可靠性恢複
基於上述配置,mongodb可以保證服務crash時,所有已經commit的操作都能通過log恢複
三 記錄檔對應的理解
1 mongodb oplog => mysql binlog
2 mongodb WAL => mysql undo+redo log
四 WAL技術解讀
WAL即 Write-Ahead Logging,是一種實現交易記錄的標準方法。WAL 的中心思想是先寫日誌,再寫資料,資料檔案的修改必鬚髮生在這些修改已經記錄在記錄檔中之後。採用WAL日誌的資料庫系統在事務提交時,WAL機制可以從兩個方面來提高效能:
- 多個client寫記錄檔可以通過一次 fsync()來完成
- 記錄檔是順序寫的,同步處理記錄的開銷要遠比同步資料頁的開銷要小
總體來說,使用了WAL機制之後,磁碟寫操作只有傳統的復原日誌的一半左右,大大提高了資料庫磁碟I/O操作的效率,從而提高了資料庫的效能。
採用了WAL機制,就不需要在每次事務提交的時候都把資料頁沖刷到磁碟,如果出現資料庫崩潰, 我們可以用日誌來恢複資料庫,任何尚未附加到資料頁的記錄都將先從日誌記錄 中重做(這叫向前滾動恢複,也叫做 REDO).WAL記錄模式提供checkpoint操作,來定時進行資料更新操作
五 關於引擎方面還有很多不太懂的地方,有興趣的可以留言交流
mongodb第五篇文章~關於mongodb的兩種引擎