1. 存儲(chǔ)引擎
1.1 存儲(chǔ)引擎是什么
存儲(chǔ)引擎是位于持久化數(shù)據(jù)(通常是放在磁盤(pán)或者內(nèi)存中)和數(shù)據(jù)庫(kù)之間的一個(gè)操作接口,它負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和讀取方式。MongoDB數(shù)據(jù)庫(kù)通過(guò)存儲(chǔ)引擎在磁盤(pán)中讀取數(shù)據(jù),而假設(shè)我們的應(yīng)用是ASP.NET MVC,我們可以使用官方的Mongo.Driver驅(qū)動(dòng),通過(guò)通信協(xié)議(如TCP)向MongoDB數(shù)據(jù)庫(kù)發(fā)送各種請(qǐng)求。以下是一個(gè)簡(jiǎn)單的運(yùn)行圖示
1.2 MongoDB中的默認(rèn)存儲(chǔ)引擎
自MongoDB 3.2 Release版本起,MongoDB默認(rèn)的存儲(chǔ)引擎就成了WiredTiger。而在之前的版本中,它還是MMAPv1。但由于,ongoDB架構(gòu)支持可插拔的存儲(chǔ)引擎,所以使用中即便要更換也是可以做到的。至于其他的功能比較大家可以參閱官方文檔,如不再是In-Place Update,新增Compression等。
我們可以在開(kāi)啟mongod服務(wù)時(shí)輸入相關(guān)參數(shù)調(diào)整存儲(chǔ)引擎,如mongod --storageEngine MMAPv1|wiredTiger
我們也可以使用db.collections.stats()查看當(dāng)前的引擎名稱
MMAPv1
MMAPv1 提供集合級(jí)別鎖(實(shí)際上稱為collection-level locking)WiredTiger
WiredTiger 對(duì)于寫(xiě)操作提供文檔級(jí)別并發(fā)控制(實(shí)際上稱為document-level concurrency),因此,不同的客戶端請(qǐng)求可以在同一時(shí)間針對(duì)一個(gè)集合中的不同文檔記性修改