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) {

    }

};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章