天天看點

leveldb學習筆記之三——include/leveldb/db.h

此檔案為leveldb的c++接口檔案,用c++的方式調用leveldb隻需要包含此檔案即可。

在此檔案中定義了leveldb對外的接口DB,其具體的實作由db/db_impl.h中的DBImpl類實作。

DB的定義如下:

class LEVELDB_EXPORT DB {
public:
    //打開資料庫
    static Status Open(const Options& options,   //options為打開的方式
                     const std::string& name,    //檔案名
                     DB** dbptr);                //資料庫執行個體對象
    DB() = default;//設定預設構造函數
    DB(const DB&) = delete;//禁止拷貝構造
    DB& operator=(const DB&) = delete;//禁止指派操作符
    virtual ~DB();
    
    //寫入鍵值對
    virtual Status Put(const WriteOptions& options,
                     const Slice& key,
                     const Slice& value) = 0;
    //删除鍵值對
    virtual Status Delete(const WriteOptions& options, const Slice& key) = 0;
    
    //批量寫入
    virtual Status Write(const WriteOptions& options, WriteBatch* updates) = 0;
    
    //通過鍵值讀取
    virtual Status Get(const ReadOptions& options,
                     const Slice& key, std::string* value) = 0;
    
    //此函數将傳回一個可以疊代周遊資料庫的句柄
    virtual Iterator* NewIterator(const ReadOptions& options) = 0;
    
    //傳回資料庫目前狀态的快照
    virtual const Snapshot* GetSnapshot() = 0;
    
    //釋放之前擷取的快照
    virtual void ReleaseSnapshot(const Snapshot* snapshot) = 0; 
    
    //傳回相關屬性的狀态
    //屬性名包括:
    //"leveldb.num-files-at-level<N>"傳回level N的檔案數目
    //"leveldb.stats"傳回内部操作的統計情況
    //"leveldb.sstables"傳回sstables的情況
    //"leveldb.approximate-memory-usage"傳回資料庫所使用的記憶體的近似位元組數
    virtual bool GetProperty(const Slice& property, std::string* value) = 0;
    
    //傳回檔案的最大使用空間
    virtual void GetApproximateSizes(const Range* range, int n,
                                   uint64_t* sizes) = 0;
    
    //調用此接口會重新壓縮相應的資料
    virtual void CompactRange(const Slice* begin, const Slice* end) = 0;
};

//删除資料庫
LEVELDB_EXPORT Status DestroyDB(const std::string& name,
                                const Options& options);

//修複資料庫
LEVELDB_EXPORT Status RepairDB(const std::string& dbname,
                               const Options& options);