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

    }

};


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