nemo存储引擎

nemo存储引擎是在rocksdb引擎基础上,增加了对redis的5种数结构kv,hash,list,set,zset的支持.对rocksdbcheckpoint做了修改,能够更好的支持checkpoint的需求

key

##接口
// =================String=====================
Status Del(const std::string &key, int64_t *count);
Status MDel(const std::vector<std::string> &keys, int64_t* count);
Status Expire(const std::string &key, const int32_t seconds, int64_t *res);
Status TTL(const std::string &key, int64_t *res);
Status Persist(const std::string &key, int64_t *res);
Status Expireat(const std::string &key, const int32_t timestamp, int64_t *res);
Status Type(const std::string &key, std::string* type);
Status Exists(const std::vector<std::string> &key, int64_t* res);

server

Status BGSave(Snapshots &snapshots, const std::string &db_path = ""); 
Status BGSaveGetSnapshot(Snapshots &snapshots);
Status BGSaveSpecify(const std::string key_type, Snapshot* snapshot);
Status BGSaveGetSpecifySnapshot(const std::string key_type, Snapshot *&snapshot);
Status BGSaveOff();
Status GetKeyNum(std::vector<uint64_t> &nums);
Status GetSpecifyKeyNum(const std::string type, uint64_t &num);
Status ScanKeyNum(std::unique_ptr<rocksdb::DBWithTTL> &db, const char kType, uint64_t &num);
Status ScanKeyNumWithTTL(std::unique_ptr<rocksdb::DBWithTTL> &db, uint64_t &num);
Status GetUsage(const std::string& type, uint64_t *result);
rocksdb::DBWithTTL* GetDBByType(const std::string& type); 
/* Meta */
// Scan all metas of db specified by given type
Status ScanMetasSpecify(DBType type, const std::string &pattern,
    std::map<std::string, MetaPtr>& metas);
// Check and recover data
Status CheckMetaSpecify(DBType type, const std::string &pattern);
// ChecknRecover function for different type db
Status ChecknRecover(DBType type, const std::string& key);
Status HChecknRecover(const std::string& key);
Status LChecknRecover(const std::string& key);
Status SChecknRecover(const std::string& key);
Status ZChecknRecover(const std::string& key);

backup engine

namespace nemo {
    const std::string DEFAULT_BK_PATH = "dump"; //Default backup root dir
    const std::string DEFAULT_RS_PATH = "db";   //Default restore root dir
    // Arguments which will used by BackupSave Thread
    // p_engine for BackupEngine handler
    // backup_dir
    //  kv, hash, list, set or zset
    struct BackupSaveArgs {
        void *p_engine;
        const std::string backup_dir;
        const std::string key_type;
        Status res;
        BackupSaveArgs(void *_p_engine, const std::string &_backup_dir,
                const std::string &_key_type)
            : p_engine(_p_engine), backup_dir(_backup_dir), key_type(_key_type) {}
    };

    struct BackupContent {
        std::vector<std::string> live_files;
        uint64_t manifest_file_size = 0;
        uint64_t sequence_number = 0;
    };

    class BackupEngine {
        public:
            ~BackupEngine();
            static Status Open(nemo::Nemo *db, BackupEngine** backup_engine_ptr);
            Status SetBackupContent();
            Status CreateNewBackup(const std::string &dir);
            void StopBackup();
            Status CreateNewBackupSpecify(const std::string &dir, const std::string &type);
        private:
            BackupEngine() {}
            std::map<std::string, rocksdb::Checkpoint*> engines_;
            std::map<std::string, BackupContent> backup_content_;
            std::map<std::string, pthread_t> backup_pthread_ts_;
            Status NewCheckpoint(rocksdb::DBWithTTL *tdb, const std::string &type);
            std::string GetSaveDirByType(const std::string _dir, const std::string& _type) const {
                std::string backup_dir = _dir.empty() ? DEFAULT_BK_PATH : _dir;
                return backup_dir + ((backup_dir.back() != '/') ? "/" : "") + _type;
            }
            Status WaitBackupPthread();
    };
}

results matching ""

    No results matching ""