nemo存储引擎
nemo
存储引擎是在rocksdb
引擎基础上,增加了对redis的5种数结构kv
,hash
,list
,set
,zset
的支持.对rocksdb
的checkpoint
做了修改,能够更好的支持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();
};
}