//控制數據庫的行爲
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) {
}
};