天天看點

option-levelDB源碼解析

//控制資料庫的行為

struct Options

{

    //比較器

    //預設:lexicographic byte-wise ordering

    const Comparator* comparator;

    //如果為true,當資料庫不存在時,就建立

    //預設:false

    bool create_if_missing;

    //如果為true,當資料庫存在是抛出錯誤

    //預設:false

    bool error_if_exists;

    //多疑檢查,如果為true,就進行進攻性檢查,如果發現錯誤就提早退出,一個有問題的條目有可能導緻大量條目不可讀,以至于整個庫無法打開

    //預設:false

    bool paranoid_checks;

    //對系統操作的封裝,比如讀寫檔案,排程任務

    //預設:Env::Default()

    Env* env;

    //如果不為空,将處理資訊、錯誤資訊寫入到info log,否則就寫在和DB内容相同的目錄

    //預設:NULL

    Logger* info_log;

    //記憶體使用的寫資料的buffer

    //預設:4M

    size_t write_buffer_size;

    //DB中,最大的打開檔案數,當工作集數量很多時,可以提升這個值

    //預設:1000

    int max_open_files;

    //使用者的資料是在被存在許多block中,一塊是一個讀取單元,假如不為null,這個cache,将用來存儲一些cache,如果為null,leveldb會使用一個8M的内部記憶體

    //預設:NULL

    Cache* block_cache;

    //每個block的大小,這裡的大小是未壓縮的,如果資料是壓縮了的,實際讀的大小可能比這個小,這個參數是可以動态被改變的

    //預設:4K

    size_t block_size;

    //block中對key做字首壓縮的長度,一般不用去管這個

    //預設:16

    int block_restart_interval;

    //壓縮類型,snappy壓縮的速度比順序存儲的速度還快,是以沒有必要選擇不壓縮

    //預設:snappy

    CompressionType compression;

    //為了減少讀磁盤,可以選擇一些過濾政策,比如NewBloomFilterPolicy()

    //預設:NULL

    const FilterPolicy* filter_policy;

    //建立對象時預設構造函數,給相應字段預設值

    Options();

}

//控制讀操作的一些選項

struct ReadOption {

    //如果為true,從底層讀的資料将會進行校驗

    bool verify_checksums;

    //如果為true,從疊代器中讀取的資料都将緩存在記憶體中,但浏覽的資料量很大的時候,不這麼幹

    //預設:true

    bool fill_cache;

    //如果設定了快照,那麼讀取就從快照讀(正在讀,沒有釋放),如果沒有設定,使用impliicit快照

    //預設:NULL

    const Snapshot* snapshot;

    //構造函數,初始化預設值

    ReadOptions()

        : verify_checksums(false),

          fill_cache(true),

          snapshot(NULL) {

    }

};

struct WriteOptions {

    //如果為true,資料會從系統cache刷磁盤,這樣會導緻寫變慢;

    //如果為false,系統崩潰,最近寫的資料可能會丢掉;如果程序挂了,沒寫的資料也會丢失

    //預設:false

    bool sync;

//建立對象時預設構造函數,給相應字段預設值

    WriteOptions()

        : sync(false) {

    }

};