//控制数据库的行为
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) {
}
};