//控制資料庫的行為
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) {
}
};