9
9

More than 5 years have passed since last update.

MongoDB 3 のストレージAPIとは

Posted at

MongoDB 3の大きな変更点の一つとして、ストレージAPIの導入というものがある。調べたのでメモしていく。

概要

ストレージAPIの思想は、クエリを受け付けたりする部分と、データを永続化する部分(ストレージ)の間に、APIを設けて、
ストレージ部分を簡単に交換できるようにしたもの。

これにより利用者はストレージをより良いものに差し替えたりできるし、ストレージ開発者にとってはMongoDBのクエリ受付部分がストレージのテストドライバになる。

MongoDB 3 では以下の二つのストレージが利用可能である。

  • 従来のmmap()システムコールベース(MMAPv1とよばれる)
  • WiredTiger

実装

ストレージAPIの実装は、ソースコードを見るとすぐにわかった。APIの実態はC++のインターフェースである。
以下のソースはストレージエンジンのインターフェースである

インターフェースのソースコード(抜粋)
https://github.com/mongodb/mongo/blob/v3.0/src/mongo/db/storage/storage_engine.h

namespace mongo {
    /**
     * The StorageEngine class is the top level interface for creating a new storage
     * engine.  All StorageEngine(s) must be registered by calling registerFactory in order
     * to possibly be activated.
     */
    class StorageEngine { 
    public:
    class Factory { /*ストレージエンジンインスタンスのファクトリ*/
        public:
        virtual ~Factory() { }
        virtual StorageEngine* create(const StorageGlobalParams& params,
                const StorageEngineLockFile& lockFile) const = 0;
        ...
    virtual void finishInit() {}   /*ストレージエンジンで実装すべき関数*/
    virtual RecoveryUnit* newRecoveryUnit() = 0; /*ストレージエンジンで実装すべき関数*/
    virtual void listDatabases( std::vector<std::string>* out ) const = 0; /*ストレージエンジンで実装すべき関数*/
    ...

MMAPv1やWiredTigerはこのインターフェースを実装している

MMAPv1の実装のソースコード(抜粋)
https://github.com/mongodb/mongo/blob/v3.0/src/mongo/db/storage/mmap_v1/mmap_v1_engine.h

    class MMAPV1Engine : public StorageEngine { /*継承している*/
    public:
        MMAPV1Engine(const StorageEngineLockFile& lockFile);
        virtual ~MMAPV1Engine();

        void finishInit();

        RecoveryUnit* newRecoveryUnit();

他のストレージエンジン

ObjectRocketではROCKSDBというものも簡単に利用できるようだ。

ちなみにObjectRocketはRackspace社が出している、MongoDB専用にチューニングされたDBサービスだったはず。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9