MongoDB 3的存储API是什么意思?

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进行调整的数据库服务。

广告
将在 10 秒后关闭
bannerAds