從3.2版本開(kāi)始巧婶,采用WiredTiger作為默認(rèn)引擎缸血,替換原有的MMAPv1引擎物蝙。
MMAPv1
基于內(nèi)存映射文件
高吞吐的插入澜汤,讀取和本地更新
通過(guò)日志來(lái)來(lái)恢復(fù)數(shù)據(jù)蚜迅。內(nèi)存數(shù)據(jù)每60秒寫(xiě)入硬盤(pán),日志每100毫秒寫(xiě)入硬盤(pán)银亲。
當(dāng)文檔所在的記錄塊超過(guò)分配的容量時(shí)慢叨,將分配2倍的記錄空間來(lái)存儲(chǔ)原有的塊內(nèi)容。
自動(dòng)采用所有可用的內(nèi)存作為緩存务蝠,由操作系統(tǒng)的虛擬內(nèi)存系統(tǒng)來(lái)管理拍谐,所以還可能涉及到磁盤(pán)文件交換。
WiredTiger $
*文檔級(jí)別并發(fā)
多客戶(hù)端可以同時(shí)修改同一條記錄。使用樂(lè)觀并發(fā)控制轩拨。使用全局践瓷,數(shù)據(jù)庫(kù)和表級(jí)別鎖。當(dāng)檢測(cè)到兩個(gè)操作之間的沖突時(shí)亡蓉,mongoDB會(huì)重試操作晕翠。
*快照和檢查點(diǎn)
WiredTiger采用MVCC(多版本并發(fā)控制)。在一次操作的開(kāi)始砍濒,WiredTiger提供即時(shí)快照淋肾,保存內(nèi)存數(shù)據(jù)的一致性視圖(cache)。每60s或日志文件達(dá)到2GB時(shí)會(huì)將當(dāng)前的數(shù)據(jù)持久化到WAL(Write ahead log)爸邢,產(chǎn)生一個(gè)新的檢查點(diǎn)樊卓。Wiredtiger連接初始化時(shí),首先將數(shù)據(jù)恢復(fù)至最新的快照狀態(tài)杠河,然后根據(jù)WAL恢復(fù)數(shù)據(jù)碌尔,以保證存儲(chǔ)可靠性。
*日志
日志記錄了兩次檢查點(diǎn)之間的所有數(shù)據(jù)變更券敌。如果在寫(xiě)入檢查點(diǎn)之前退出了唾戚,從日志恢復(fù)上次檢查點(diǎn)之后的數(shù)據(jù)改動(dòng)。
*數(shù)據(jù)壓縮
*內(nèi)存占用
WiredTiger內(nèi)部緩存和文件系統(tǒng)緩存
全內(nèi)存引擎
mongod --storageEngine inMemory --dbpath <path>
或者 YAML配置文件
storage:
engine: inMemory
dbPath: <path>