Mongodb Wiredtiger存儲引擎實現原理
Mongodb-3.2已經WiredTiger設置為了默認的存儲引擎,最近通過閱讀wiredtiger源代碼(在不了解其內部實現的情況下,讀代碼難度相當大,代碼量太大,強烈建議官方多出些介紹文章),理清了wiredtiger的大致原理,并簡單總結,不保證內容都是正確的,如有問題請指出,歡迎討論交流。
按照Mongodb默認的配置,?WiredTiger的寫操作會先寫入Cache,并持久化到WAL(Write ahead log),每60s或log文件達到2GB時會做一次Checkpoint,將當前的數據持久化,產生一個新的快照。Wiredtiger連接初始化時,首先將數據恢復至最新的快照狀態,然后根據WAL恢復數據,以保證存儲可靠性。
Wiredtiger的Cache采用Btree的方式組織,每個Btree節點為一個page,root page是btree的根節點,internal page是btree的中間索引節點,leaf page是真正存儲數據的葉子節點;btree的數據以page為單位按需從磁盤加載或寫入磁盤。
Wiredtiger采用Copy on write的方式管理修改操作(insert、update、delete),修改操作會先緩存在cache里,持久化時,修改操作不會在原來的leaf page上進行,而是寫入新分配的page,每次checkpoint都會產生一個新的root page。
參考資料
作者簡介
張友東](http://yunnotes.net),就職于阿里云飛天技術部,主要關注分布式存儲、Nosql等技術領域,參與 TFS(淘寶分布式文件系統) 、 AliCloudDB for Redis 等項目的開發工作,歡迎交流。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!