前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leveldb之Options详解

leveldb之Options详解

作者头像
用户4700054
发布2022-08-17 11:35:16
8440
发布2022-08-17 11:35:16
举报
文章被收录于专栏:存储内核技术交流

leveldb中Options有什么作用?

  • Options 定义了打开leveldb时候的行为包括了key的比较函数、整个数据库的读写读写方式、后台任务、全局的日志、Memtable的上限、数据库打开文件的最大个数、Cache初始化、block的大小、默认压缩方式、基于磁盘读的过滤等,Options 定义了整个数据库打开的参数的入口。
  • leveldb同时也定义了ReadOptions和WriteIOptions分别来定义leveldb读和写的参数控制
Options定义是什么?都有哪些Options选型?
  • 打开数据库全局参数Options定义
代码语言:javascript
复制
// 打开数据库时候传入,来确定打开leveldb时候的数据库的参数
struct LEVELDB_EXPORT Options {
	// 默认参数传入
	Options();
  // 每个key在sstable中的排序函数,默认是按照字节比较的
  const Comparator* comparator;

  // 打开数据库时候如果数据库目录不存在,来控制是创建还是退出
  bool create_if_missing = false;

  // If true, an error is raised if the database already exists.
  // 
  bool error_if_exists = false;

  // If true, the implementation will do aggressive checking of the
  // data it is processing and will stop early if it detects any
  // errors.  This may have unforeseen ramifications: for example, a
  // corruption of one DB entry may cause a large number of entries to
  // become unreadable or for the entire DB to become unopenable.
  bool paranoid_checks = false;

  
  // 封装每个文件读写、调度后台任务等
  Env* env;

  // 基于文件的log
  Logger* info_log = nullptr;

  // 每个active memtable的内存消耗的上限,一旦超过转换为不可更改的memtable
  size_t write_buffer_size = 4 * 1024 * 1024;


  // 每个leveldb的数据库打开的最大文件数
  int max_open_files = 1000;
  
  // 磁盘block的Cache定义和初始化
  Cache* block_cache = nullptr;

  // leveldb中每个block大小
  size_t block_size = 4 * 1024;

  
  int block_restart_interval = 16;

  // 每个文件写入的数据量,当超过会切换为新的一个文件
  size_t max_file_size = 2 * 1024 * 1024;
  // 压缩方式
  CompressionType compression = kSnappyCompression;


  bool reuse_logs = false;


  // 通过过滤器来判断数据是否在磁盘上,这里可以使用布隆过滤器
  const FilterPolicy* filter_policy = nullptr;
};

// 全局Options构造函数
// BytewiseComparator定义了两个字符串的比较函数
// Env 是全局虚函数,分别定义了PosixEnv和WindowsEnv,分别代表Linux/Unix和Windows下针对leveldb的文件操作的实现
Options::Options() : comparator(BytewiseComparator()), env(Env::Default()) {}

  • 数据库读操作ReadOptions参数控制定义
代码语言:javascript
复制
// 控制读操作的参数
struct LEVELDB_EXPORT ReadOptions {
  ReadOptions() = default;

  // 来控制是否每次读都做数据的checksum
  bool verify_checksums = false;

  // 每次读操作后数据是否要缓存在内存中
  bool fill_cache = true;

  // snapshot指针初始化
  const Snapshot* snapshot = nullptr;
};
  • 数据库写操作
代码语言:javascript
复制
/ 写操作控制参数定义
struct LEVELDB_EXPORT WriteOptions {
	// 默认参数初始化
  WriteOptions() = default;

  // 每次写操作是否要wal 日志刷盘的控制
  bool sync = false;
};
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 存储内核技术交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • leveldb中Options有什么作用?
    • Options定义是什么?都有哪些Options选型?
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档