MongoDB journaling 工作原理

journaling 是如何工作的?MongoDB的數據文件,journal 文件表示如下:

wKioL1LfcE6RskfeAACwVV40tEU818.jpg

啓動mongod,數據文件映射到共享視圖 .

wKiom1LfcHLxJW9lAAD5hPt0w7w802.jpg

這時候內存依然依靠文件做後盾: 內存中的變化,操作系統刷新到底層文件. 這是MongoDB在沒有journaling時候的工作方式: 操作系統每60秒將內存中的變化刷新到文件.

然而, 啓用 journaling,mongod 會再做一次映射, 映射到私有視圖. 附帶的, 啓用journallingmongod使用的虛擬內存將會翻倍.

wKioL1LfcE-hgzivAAEaHEXozgI861.jpg

注意到私有視圖沒有映射到數據文件, 所以操作系統不能將任何改變刷新到磁盤.

現在寫數據時,mongod寫到私有視圖.

wKiom1LfcHLBwD7TAAFQ7Nxwa2c852.jpg

mongod然後將數據的變化寫到 journal 文件,並加上文件變化的一些描述.私有視圖刷新到journal的是100ms.默認情況下,journal刷新到磁盤的週期是每100ms.

wKioL1LfcE_BPu2bAAFvAM5NN6I265.jpg

journal 將關於變化的描述追加到文件

wKiom1LfcHPw3_mpAAFqJyMH4bA170.jpg

這時候, 寫是安全的. 如果mongod崩潰,journal可以重放變化, 雖然還沒有寫到數據文件

journal 將在共享視圖上重放變化.

wKioL1LfcFDhaTOOAAHKGKsvhws694.jpg

然後,mongod將共享視圖重新映射到私有視圖. 這樣防止私有視圖太”(有許多變化從共享視圖刷新).

wKiom1LfcHOQwTqeAAGhxUEM5Rg261.jpg

最後, 與其它的相比,以很慢的速度, 共享視圖將刷新到磁盤. 默認情況下,mongod 請求操作系統每60秒刷新一次.

wKioL1LfcFCRlXwtAAGdjjPeY5M346.jpg


出自:

http://www.ttlsa.com/mongodb/how-mongodbs-journaling-works/

http://www.kchodorow.com/blog/2012/10/04/how-mongodbs-journaling-works/



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章