成员:余明阳 包亦晟
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

62 lines
2.0 KiB

#pragma
#include <iostream>
#include "leveldb/db.h"
#include <vector>
#include <mutex>
namespace leveldb {
class LEVELDB_EXPORT MyLevelDB : leveldb::DB {
public:
MyLevelDB(Options& options, std::string db_name)
: _op(options), _db_name(db_name) {
//打开数据库
Status status = DB::Open(options, db_name + "_main", &_fields_db);
if (!status.ok()) {
std::cerr << "Open main database failure: " << status.ToString() << std::endl;
abort();
}
}
//序列化为字符串
void SerializeValue(const FieldArray& fields, std::string& resString);
// 反序列化为字段数组
void ParseValue(const std::string& value_str, FieldArray& resFieldArray);
//字段存储
Status PutWithFields(const WriteOptions& options, const std::string& key,const FieldArray& fields);
//字段查找
Status FindKeysByField(const ReadOptions& options, const Field field,std::vector<std::string>* keys);
//创建索引
Status CreateIndexOnField(const std::string& field_name);
//删除索引
Status DeleteIndex(std::string& field_name);
void QueryByIndex(const ReadOptions& options, Field& field,
std::vector<std::string>& keys);
public:
Status Put(const WriteOptions& options, const Slice& key,
const Slice& value) override;
Status Delete(const WriteOptions& options, const Slice& key) override;
Status Write(const WriteOptions& options, WriteBatch* updates) override;
Status Get(const ReadOptions& options, const Slice& key,
std::string* value) override;
Iterator* NewIterator(const ReadOptions& options) override;
const Snapshot* GetSnapshot() override;
void ReleaseSnapshot(const Snapshot* snapshot) override;
bool GetProperty(const Slice& property, std::string* value) override;
void GetApproximateSizes(const Range* range, int n, uint64_t* sizes) override;
void CompactRange(const Slice* begin, const Slice* end) override;
private:
Options _op;
std::string _db_name;
DB* _fields_db;
std::vector<std::string> index_list_;
std::mutex mutex_;
std::vector<DB*> index_db;
};
}