• 1
  • 2
  • 3
  • 4
  • 5
mssql数据库问题 首 页  »  帮助中心  »  数据库  »  mssql数据库问题
MongoDB多存储引擎支持机制说明
发布日期:2016-4-29 17:4:21

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

  

  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 _collections;

  };

  DatabaseHolder

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

  class DatabaseHoler {

  public:

  Database* openDb(string dbname);

  void close(string dbname);

  Database* get(string dbname);

  pirate:

  map dbs;

  };

  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;

  };

  Collection

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

  class Collection {

  public:

  insertDocument();

  deleteDocument();

  updateDocument();

  findDoc();

  private:

  RecordStore* _recordStore;

  };

  StorageEngine

  StorageEngine定义了一系列Mongdb存储引擎需要实现的接口,是一个接口类,所有的存储引擎需继承这个类,实现自身的存储逻辑。

  getDatabaseCatalogEntry接口用于获取一个DatabaseCatalogEntry对象,该对象实现了关于集合、文档操作的接口。

  class StorageEngine {

  public:

  DatabaseCatalogEntry* getDatabaseCatalogEntry(string& ns);

  void listDatabases( std::vector* out );

  };

  class DatabaseCatalogEntry {

  public:

  createCollection();

  dropCollection();

  getRecordStore(); /* 实现文档操作接口 */

  };

  KVStorageEngine

  KVStorageEngine实际上不是一个真正存储引擎的实现,只是为了方便接入wiredTiger、rocks等KV类型的存储引擎而增加的一个抽象层。

  KVStorageEngine实现了StorageEngine的接口,但其实现由KVEngine类代理,wiredTiger等KV存储引擎接入mongdb时,只需实现KVEngine定义的接口即可。

  MMAPV1StorageEngine

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

  WiredTigerKVEngine

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