Mongodb 多存储引擎支持机制

Posted 数据分析与开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb 多存储引擎支持机制相关的知识,希望对你有一定的参考价值。


网址:http://www.mongoing.com/archives/1533


Mongodb mmapv1存储引擎解析中介绍了Mongodb默认的mmapv1引擎的实现机制,在Mongodb 3.0版本中,引入了WiredTiger存储引擎,同时还有实验版本的In-memory引擎、rocks引擎,本文将介绍Mongodb是如何支持多存储引擎的。



DatabaseHolder


DatabaseHolder是Mongodb数据库操作的入口,提供了打开、关闭数据库的接口,其中openDb接口会创建一个Database对象。


class DatabaseHoler {public:
    Database* openDb(string dbname);    void close(string dbname);
    Database* get(string dbname);
pirate:    map<string, Database*> dbs;
};


Database


Database对象代表Mongodb里的一个db,其提供关于集合操作的所有接口,包括创建、删除、重命名集合,创建Database时会根据mongod进程的storageEngine配置来决定使用哪个存储引擎。


class Database {public:
    Collection* createCollection(string& coll_name);    void dropCollection(string& coll_name);
    Collection* getCollection(string& coll_name);private:    map<string, Collection*> _collections;
};


Collection


Collection代表Mongodb里的一个集合,其提供关于文档增删改查的所有接口,这些接口最终会调用RecordStore里的相应接口实现。


class Collection {
public:
   insertDocument();
   deleteDocument();
   updateDocument();
   findDoc();private:   RecordStore* _recordStore;
};


GlobalEnvironmentMongoD


GlobalEnvironmentMongoD是mongod的全局运行环境信息,所有的存储引擎在启动时会先注册,mongd根据配置设置当前使用的存储引擎; 注册引擎时,提供引擎的名字(如mmapv1、wiredTiger)及用于创建引擎对象的工厂方法(工厂实现create的接口,用于创建StorageEngine对象)。


class GlobalEnvironmentMongoD {
pubic:    void registerStorageEngine(const std::string& name,         const StorageEngine::Factory* factory);    void setGlobalStorageEngine(const std::string& name);
    StorageEngine* getGlobalStorageEngine();private:
    StorageEngine* _storageEngine; // 当前存储引擎
    FactoryMap _storageFactories;
};


StorageEngine


StorageEngine定义了一系列Mongdb存储引擎需要实现的接口,是一个接口类,所有的存储引擎需继承这个类,实现自身的存储逻辑。 getDatabaseCatalogEntry接口用于获取一个DatabaseCatalogEntry对象,该对象实现了关于集合、文档操作的接口。


class StorageEngine {public:
    DatabaseCatalogEntry* getDatabaseCatalogEntry(string& ns);    void listDatabases( std::vector<std::string>* out );
};class DatabaseCatalogEntry {public:
    createCollection();
    dropCollection();
    getRecordStore();  /* 实现文档操作接口 */};


MMAPV1StorageEngine


MMAPV1StorageEngine包含了mmapv1存储引擎的所有实现逻辑。


KVStorageEngine


KVStorageEngine实际上不是一个真正存储引擎的实现,只是为了方便接入wiredTiger、rocks等KV类型的存储引擎而增加的一个抽象层。 KVStorageEngine实现了StorageEngine的接口,但其实现由KVEngine类代理,wiredTiger等KV存储引擎接入mongdb时,只需实现KVEngine定义的接口即可。


WiredTigerKVEngine


WiredTigerKVEngine继承KVEngine,实现KVEngine的接口,其他的引擎如RocksEngine类似。




数据库开发

--------------------------------------

商务合作QQ:2302462408

投稿网址:top.jobbole.com


以上是关于Mongodb 多存储引擎支持机制的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb 请求处理流程

MongoDB 数据模型

mongodb存储引擎

mongodb之存储引擎

如何将代码片段存储在 mongodb 中?

常见问答:MongoDB 存储