天天看點

mongdb wiredtiger存儲引擎

wiredtiger存儲引擎是文檔級别的并發,多個用戶端能同時操作一個集合中的不通的文檔。

對于大多數的讀寫操作,wiredtiger使用樂觀鎖的并發控制,在global,database collection級别使用意向鎖,當存儲引擎檢測到兩個操作沖突時候,mongodb會透明的對導緻寫沖突的操作進行重試。

一些全局的操作,例如一些包含多個資料庫的短期操作,仍然會需要全局的執行個體級别鎖,一些其他操作,比如删除集合,需要一個排他的資料庫鎖。

快照和檢查點

wiredtiger提供mvcc,在操作的開始,wiredtiger提供一個基于時間點的快照,快照提供記憶體中資料的一緻性視圖。

寫入磁盤時,WiredTiger将所有資料檔案中的快照中的所有資料以一緻的方式寫入磁盤。 現在持久的資料充當資料檔案中的檢查點。 該檢查點可確定資料檔案直到最後一個檢查點(包括最後一個檢查點)都保持一緻; 即檢查點可以充當恢複點。

wiredtiger中是間隔60s,或産生2g的journal data資料産生一個檢查點。

在寫一個新檢查點的時候,之前的檢查點仍然有效,這樣在寫入新檢查點的時候,如果mongodb遇到問題,在重新開機的時候會恢複到最近一個有效的檢查點。

當WiredTiger的中繼資料表被原子更新以引用新的檢查點時,新的檢查點将變為可通路且永久的。 一旦可以通路新的檢查點,WiredTiger就會從舊的檢查點釋放頁面。

即便不實用jounaling,mongodb也能恢複到最近的檢查點,然後為了恢複最近檢查點以後的改變,仍然需要運作journaling.