Mongodb多儲存引擎支援機制

發表於2015-08-14

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

檢視大圖

DatabaseHolder

DatabaseHolder是Mongodb資料庫操作的入口,提供了開啟、關閉資料庫的介面,其中openDb介面會建立一個Database物件。

Database

Database物件代表Mongodb裡的一個db,其提供關於集合操作的所有介面,包括建立、刪除、重新命名集合,建立Database時會根據mongod程式的storageEngine配置來決定使用哪個儲存引擎。

Collection

Collection代表Mongodb裡的一個集合,其提供關於文件增刪改查的所有介面,這些介面最終會呼叫RecordStore裡的相應介面實現。

GlobalEnvironmentMongoD

GlobalEnvironmentMongoD是mongod的全域性執行環境資訊,所有的儲存引擎在啟動時會先註冊,mongd根據配置設定當前使用的儲存引擎; 註冊引擎時,提供引擎的名字(如mmapv1、wiredTiger)及用於建立引擎物件的工廠方法(工廠實現create的介面,用於建立StorageEngine物件)。

StorageEngine

StorageEngine定義了一系列Mongdb儲存引擎需要實現的介面,是一個介面類,所有的儲存引擎需繼承這個類,實現自身的儲存邏輯。 getDatabaseCatalogEntry介面用於獲取一個DatabaseCatalogEntry物件,該物件實現了關於集合、文件操作的介面。

MMAPV1StorageEngine

MMAPV1StorageEngine包含了mmapv1儲存引擎的所有實現邏輯。

KVStorageEngine

KVStorageEngine實際上不是一個真正儲存引擎的實現,只是為了方便接入wiredTiger、rocks等KV型別的儲存引擎而增加的一個抽象層。 KVStorageEngine實現了StorageEngine的介面,但其實現由KVEngine類代理,wiredTiger等KV儲存引擎接入mongdb時,只需實現KVEngine定義的介面即可。

WiredTigerKVEngine

WiredTigerKVEngine繼承KVEngine,實現KVEngine的介面,其他的引擎如RocksEngine類似。

相關文章