在MongoDB數據更新時,WiredTiger存儲引擎使用預寫日誌的機制先將數據更新寫入到Journal日誌文件中。然後在創建檢查點操作開始時,再將日誌文件中記錄的操作刷新到數據文件。換句話説,通過預寫日誌和檢查點機制可以保證將數據更新持久化到數據文件中,並實現數據的一致性。
在檢查點(Checkpoint)操作開始時,WiredTiger存儲引擎將提供指定時間點的數據庫快照,該快照反映的是MongoDB當前內存中的數據情況。當向磁盤寫入數據時,WiredTiger存儲引擎將快照中的所有數據以一致性方式寫入到MongoDB的數據文件上,並保證數據文件和內存數據是一致性的。由於檢查點是定期執行,因此檢查點操作能夠縮短MongoDB從Journal日誌文件恢復數據的時間。在默認情況下,WiredTiger存儲引擎創建檢查點的時間間隔是60秒或產生2GB的Journal日誌信息文件。在WiredTiger存儲引擎創建新的檢查點期間,上一個檢查點仍然是有效的。這意味着即使MongoDB在創建新的檢查點期間遭遇到錯誤而異常終止運行,只要重啓MongoDB就能從上一個有效的檢查點開始恢復數據。當新的檢查點創建成功後,WiredTiger存儲引擎以原子方式更新元數據表使其引用新創建的檢查點,同時會將老的檢查點佔用的磁盤空間釋放。
下圖説明了MongoDB寫入數據時,MongoDB的預寫日誌機制及與產生檢查點操作之間的關係。