天天看點

MongoDB多存儲引擎支援機制

mongodb mmapv1存儲引擎解析中介紹了mongodb預設的mmapv1引擎的實作機制,在mongodb 3.0版本中,引入了wiredtiger存儲引擎,同時還有實驗版本的in-memory引擎、rocks引擎,本文将介紹mongodb是如何支援多存儲引擎的。

MongoDB多存儲引擎支援機制

databaseholder是mongodb資料庫操作的入口,提供了打開、關閉資料庫的接口,其中opendb接口會建立一個database對象。

database對象代表mongodb裡的一個db,其提供關于集合操作的所有接口,包括建立、删除、重命名集合,建立database時會根據mongod程序的storageengine配置來決定使用哪個存儲引擎。

collection代表mongodb裡的一個集合,其提供關于文檔增删改查的所有接口,這些接口最終會調用recordstore裡的相應接口實作。

globalenvironmentmongod是mongod的全局運作環境資訊,所有的存儲引擎在啟動時會先注冊,mongd根據配置設定目前使用的存儲引擎; 注冊引擎時,提供引擎的名字(如mmapv1、wiredtiger)及用于建立引擎對象的工廠方法(工廠實作create的接口,用于建立storageengine對象)。

storageengine定義了一系列mongdb存儲引擎需要實作的接口,是一個接口類,所有的存儲引擎需繼承這個類,實作自身的存儲邏輯。

getdatabasecatalogentry接口用于擷取一個databasecatalogentry對象,該對象實作了關于集合、文檔操作的接口。

mmapv1storageengine包含了mmapv1存儲引擎的所有實作邏輯。

kvstorageengine實際上不是一個真正存儲引擎的實作,隻是為了友善接入wiredtiger、rocks等kv類型的存儲引擎而增加的一個抽象層。

kvstorageengine實作了storageengine的接口,但其實作由kvengine類代理,wiredtiger等kv存儲引擎接入mongdb時,隻需實作kvengine定義的接口即可。

wiredtigerkvengine繼承kvegine,實作kvengine的接口,其他的引擎如rocksengine類似。