今天看了mongodb的官方文檔中的WiredTiger Storage Engine ,說說我對WiredTiger Storage Engine 的理解!

  在mongodb3.2版本以后,wiredTiger 存儲(chǔ)引擎為默認(rèn)的儲(chǔ)存引擎。

Document Level Concurrency

  WiredTiger 的寫操作使用了Document 級別的并發(fā)控制,因此多個(gè)clients可以同時(shí)同一個(gè)collection 中的不同的document  進(jìn)行修改。

  為了盡可能多的讀和寫操作,WiredTiger 使用了optimistic  concurrency control(樂觀的并發(fā)控制),相當(dāng)于樂觀鎖,WiredTiger的全局的專一的鎖,僅僅存在于database 和 collections 級別,例如:drop 一個(gè)collections,需要一個(gè)database級別的鎖。當(dāng)存儲(chǔ)引擎在database 和collection的鎖之間發(fā)生沖突時(shí),其中的一個(gè)將會(huì)引發(fā)數(shù)據(jù)庫寫的沖突導(dǎo)致mongdb 去重新進(jìn)行此操作。

Snapshots and Checkpoints

  WiredTiger 使用 多版本并發(fā)控制(MVCC)。再開始的操作中,WiredTiger 為這個(gè)事務(wù)提供一個(gè)數(shù)據(jù)的時(shí)間點(diǎn)的快照(snapshot),一個(gè)快照呈現(xiàn)一組在內(nèi)存中的數(shù)據(jù)的視圖。

  當(dāng)寫進(jìn)磁盤時(shí),WiredTiger 把所有的在snapshot中的數(shù)據(jù)通過相同的方法傳遞到磁盤中的數(shù)據(jù)文件。把在數(shù)據(jù)文件中的久經(jīng)耐用的數(shù)據(jù)作為一個(gè)檢查站(checkpoint),這個(gè)檢查站確保數(shù)據(jù)文件和上一個(gè)檢查站的數(shù)據(jù)是一致的,包括最后一個(gè)檢查站。eg:檢查站可以作為數(shù)據(jù)的恢復(fù)的點(diǎn)。mongodb配置的WiredTiger 去創(chuàng)建的站點(diǎn)是在間隔60秒或者2 GB的日志數(shù)據(jù)。

  在寫一個(gè)新的站點(diǎn)期間,如果前面一個(gè)站點(diǎn)仍然是有效的,就這點(diǎn)而論,如果mongodb 意外結(jié)束或者突然遇到一個(gè)錯(cuò)誤,再重新開始之前,mongodb 可以從上一個(gè)有效的checkpoint恢復(fù)數(shù)據(jù)。

  當(dāng)WiredTiger 元數(shù)據(jù)的表被原子性的更新到新的檢查站點(diǎn)的說明文檔時(shí),這個(gè)新的站點(diǎn)變得可用和穩(wěn)定,一但新的站點(diǎn)變的可用,WiredTiger會(huì)釋放pages從舊的檢查站點(diǎn)。

Journal

  WiredTiger 使用一個(gè)write-ahead 處理log, 并且結(jié)合檢查站點(diǎn)去確保數(shù)據(jù)的耐久性。

  WiredTiger 日志呈現(xiàn)了所有的數(shù)據(jù)在檢查站點(diǎn)之間的變化,如果mongodb在檢查站點(diǎn)之間退出,它使用日志去重新從上一個(gè)檢查站點(diǎn)更新所有的被修改的數(shù)據(jù),信息更新的頻率和mongodb把日志數(shù)據(jù)寫到磁盤的頻率相同。WiredTiger 的日志是使用了快速壓縮庫被壓縮,如果自己想指定一個(gè)混合的壓縮運(yùn)算或者不壓縮使用 storage.wiredTiger.engineConfig.journalCompressor 

  WiredTiger的最小的log 記錄大小是128 bytes。如果一個(gè)log 記錄小于等于128 bytes, WiredTiger 不會(huì)

網(wǎng)友評論