#pragma #include #include "leveldb/db.h" #include #include 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* keys); //创建索引 Status CreateIndexOnField(const std::string& field_name); //删除索引 Status DeleteIndex(std::string& field_name); void QueryByIndex(const ReadOptions& options, Field& field, std::vector& 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 index_list_; std::mutex mutex_; std::vector index_db; }; }