RocksDB用户可以通过Options类将配置信息传入引擎,除此之外,还可以以下其他方法设置,分别为:

  1. 通过option file生成一个option class
  2. 从option string中获取option 信息
  3. 从string map中获取option信息

option string

  用户可以调用GetColumnFamilyOptionsFromString() or GetDBOptionsFromString()将option string 传入方法,就可以解析出string中的option信息,也可以使拥GetBlockBasedTableOptionsFromString() and GetPlainTableOptionsFromString() 方法获取表格中的配置信息。每个option信息在option string中以<option_name>:<option_value>传入,多个option之间以;分割。
例如:

table_factory=PlainTable;prefix_extractor=rocksdb.CappedPrefix.13;comparator=leveldb.BytewiseComparator;compression_per_level=kBZip2Compression:kBZip2Compression:kBZip2Compression:kNoCompression:kZlibCompression:kBZip2Compression:kSnappyCompression;max_bytes_for_level_base=986;bloom_locality=8016;target_file_size_base=4294976376;memtable_huge_page_size=2557;max_successive_merges=5497;max_sequential_skip_in_iterations=4294971408;arena_block_size=1893;target_file_size_multiplier=35;min_write_buffer_number_to_merge=9;max_write_buffer_number=84;write_buffer_size=1653;max_compaction_bytes=64;max_bytes_for_level_multiplier=60;memtable_factory=SkipListFactory;compression=kNoCompression;bottommost_compression=kDisableCompressionOption;min_partial_merge_operands=7576;level0_stop_writes_trigger=33;num_levels=99;level0_slowdown_writes_trigger=22;level0_file_num_compaction_trigger=14;compaction_filter=urxcqstuwnCompactionFilter;soft_rate_limit=530.615385;soft_pending_compaction_bytes_limit=0;max_write_buffer_number_to_maintain=84;verify_checksums_in_compaction=false;merge_operator=aabcxehazrMergeOperator;memtable_prefix_bloom_size_ratio=0.4642;memtable_insert_with_hint_prefix_extractor=rocksdb.CappedPrefix.13;paranoid_file_checks=true;force_consistency_checks=true;inplace_update_num_locks=7429;optimize_filters_for_hits=false;level_compaction_dynamic_level_bytes=false;inplace_update_support=false;compaction_style=kCompactionStyleFIFO;purge_redundant_kvs_while_flush=true;hard_pending_compaction_bytes_limit=0;disable_auto_compactions=false;report_bg_io_stats=true;compaction_filter_factory=mpudlojcujCompactionFilterFactory;

options map

类似的,用户可以通过string map获取配置信息,需要调用以下函数:GetColumnFamilyOptionsFromMap(), GetDBOptionsFromMap(), GetBlockBasedTableOptionsFromMap() or GetPlainTableOptionsFromMap()。
例如:

 std::unordered_map<std::string, std::string> cf_options_map = {{"write_buffer_size", "1"},{"max_write_buffer_number", "2"},{"min_write_buffer_number_to_merge", "3"},{"max_write_buffer_number_to_maintain", "99"},{"compression", "kSnappyCompression"},{"compression_per_level","kNoCompression:""kSnappyCompression:""kZlibCompression:""kBZip2Compression:""kLZ4Compression:""kLZ4HCCompression:""kXpressCompression:""kZSTD:""kZSTDNotFinalCompression"},{"bottommost_compression", "kLZ4Compression"},{"compression_opts", "4:5:6:7"},{"num_levels", "8"},{"level0_file_num_compaction_trigger", "8"},{"level0_slowdown_writes_trigger", "9"},{"level0_stop_writes_trigger", "10"},{"target_file_size_base", "12"},{"target_file_size_multiplier", "13"},{"max_bytes_for_level_base", "14"},{"level_compaction_dynamic_level_bytes", "true"},{"max_bytes_for_level_multiplier", "15.0"},{"max_bytes_for_level_multiplier_additional", "16:17:18"},{"max_compaction_bytes", "21"},{"soft_rate_limit", "1.1"},{"hard_rate_limit", "2.1"},{"hard_pending_compaction_bytes_limit", "211"},{"arena_block_size", "22"},{"disable_auto_compactions", "true"},{"compaction_style", "kCompactionStyleLevel"},{"verify_checksums_in_compaction", "false"},{"compaction_options_fifo", "23"},{"max_sequential_skip_in_iterations", "24"},{"inplace_update_support", "true"},{"report_bg_io_stats", "true"},{"compaction_measure_io_stats", "false"},{"inplace_update_num_locks", "25"},{"memtable_prefix_bloom_size_ratio", "0.26"},{"memtable_huge_page_size", "28"},{"bloom_locality", "29"},{"max_successive_merges", "30"},{"min_partial_merge_operands", "31"},{"prefix_extractor", "fixed:31"},{"optimize_filters_for_hits", "true"},};

可用配置

  不论是在option string还是option map中,option name是目标类中的变量名,这些包括:DBOptions, ColumnFamilyOptions, BlockBasedTableOptions, or PlainTableOptions。DBOptions and ColumnFamilyOptions中的变量名和变量描述信息可以在options.h中找到,BlockBasedTableOptions, and PlainTableOptions中的变量信息可以在table.h中找到。
  需要注意的是,尽管绝大部分的配置项都可以在option string和option map中支持,仍然有一些例外。RocksDB支持的所有配置项可以在db_options_type_info, cf_options_type_info and block_based_table_type_info中查阅,源文件是util/options_helper.h。
  如果配置项是一个回调类,比如:comparators, compaction filter, and merge operators,需要将回调类的指针作为option value传入。当然也有一些例外情况可以支持通过option string和option map传入回调类。

  • Prefix extractor
    option value可以这样传入:rocksdb.FixedPrefix.<prefix_length> or rocksdb.CappedPrefix.<prefix_length>
  • Filter policy
    option name:filter_poilcy
    option value:bloomfilter:<bits_per_key>:<use_block_based>
  • table factory
    option name: table_factory
    option value: BlockBasedTable or PlainTable
    *Memtable Factory
    option name: memtable_factory
    option value : skip_list/prefix_hash/hash_linkedlist/vector/cukoo

option file

  假设,我们打开了一个RocksDB实例,创建了一个列族,然后关闭实例,代码如下

s = DB::Open(rocksdb_options, path_to_db, &db);
...
// Create column family, and rocksdb will persist the options.
ColumnFamilyHandle* cf;
s = db->CreateColumnFamily(ColumnFamilyOptions(), "new_cf", &cf);
...
// close DB
delete cf;
delete db;

  自从4.3版本以后,每个RocksDB实例都会自动存储最新的配置信息到一个配置文件中,这个配置文件可以在下次再打开数据库时使用。这和4.2版本或者更老版本差别还是很大的,在老版本,用户需要记录每个列族的配置信息,这样下次才可以成功打开DB实例。
  首先,调用调用LoadLatestOptions()来加载目标RocksDB的最新配置信息

DBOptions loaded_db_opt;
std::vector<ColumnFamilyDescriptor> loaded_cf_descs;
LoadLatestOptions(path_to_db, Env::Default(), &loaded_db_opt,&loaded_cf_descs);

  由于c++没有映射机制,以下用户自定义的函数和类型指针必须在初始化时默认指定,更详细的信息可以在rocksdb/utilities/options_util.h找到。

* env
* memtable_factory
* compaction_filter_factory
* prefix_extractor
* comparator
* merge_operator
* compaction_filter
* cache in BlockBasedTableOptions
* table_factory other than BlockBasedTableFactory

  这些不支持的用户自定义函数,开发者需要手动指定。例如:下面这个例子我们初始化BlockBasedTableOptions and CompactionFilter中的cache配置。

for (size_t i = 0; i < loaded_cf_descs.size(); ++i) {auto* loaded_bbt_opt = reinterpret_cast<BlockBasedTableOptions*>(loaded_cf_descs[0].options.table_factory->GetOptions());loaded_bbt_opt->block_cache = cache;
}loaded_cf_descs[0].options.compaction_filter = new MyCompactionFilter();

  接下来,我们可以做sanity check来保证可以正确安全地打开目标数据库

Status s = CheckOptionsCompatibility(kDBPath, Env::Default(), db_options, loaded_cf_descs);

  如果check 返回OK,我们就可以继续使用上面load的配置集合来打开数据库了。

s = DB::Open(loaded_db_opt, kDBPath, loaded_cf_descs, &handles, &db);

  RocksDB配置文件是INI 文件格式,每个配置文件都有一个版本区块,DBOption 区块、CFOption区块、TableOption区块,每一个列族都有这几类配置区块。以下是一个完整的配置文件示例

[Version]rocksdb_version=4.3.0options_file_version=1.1
[DBOptions]stats_dump_period_sec=600max_manifest_file_size=18446744073709551615bytes_per_sync=8388608delayed_write_rate=2097152WAL_ttl_seconds=0...
[CFOptions "default"]compaction_style=kCompactionStyleLevelcompaction_filter=nullptrnum_levels=6table_factory=BlockBasedTablecomparator=leveldb.BytewiseComparatorcompression_per_level=kNoCompression:kNoCompression:kNoCompression:kSnappyCompression:kSnappyCompression:kSnappyCompression...
[TableOptions/BlockBasedTable "default"]format_version=2whole_key_filtering=trueskip_table_builder_flush=falseno_block_cache=falsechecksum=kCRC32cfilter_policy=rocksdb.BuiltinBloomFilter....

RocksDB系列二:RocksDB Option相关推荐

  1. Pyside2 学习系列二:PyInstaller打包项目exe (超详细的Pyside2 攻略)

    继上一篇文章创建了项目后,本章我们进行项目的打包工作. 本项目的所有演示代码:github可在这里下载. 打包只用的工具为PyInstaller. 打包步骤 1 准备环境 1.1 安装`PyInsta ...

  2. protobuf3 自定义option_Protobuf3 系列二 定义复杂的proto文件

    定义复杂的对象 这是Protobuf3的系列二: 如何在protobuf中定义更复杂的对象 proto文件 除了定义string, int等基础对象外(protobuf的基础数据结构和Java变量的对 ...

  3. 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+kibanaV5.4.2+x-packV5.4.2安装

    相关博文: 搜索引擎ElasticSearchV5.4.2系列一之ES介绍 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+klanaV5.4.2+x-p ...

  4. 【C++自我精讲】基础系列二 const

    [C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...

  5. 人工智能算法通俗讲解系列(二):逻辑回归

    2019独角兽企业重金招聘Python工程师标准>>> 今天,我们介绍的机器学习算法叫逻辑回归.它英语名称是Logistic Regression,简称LR. 跟之前一样,介绍这个算 ...

  6. 【算法系列 二】Stack

    为什么80%的码农都做不了架构师?>>>    栈应用的场景: 1.括号问题 2.后缀表达式 3.深度优先遍历 4.保存现场 1. 给定字符串,仅由"()[]{}" ...

  7. 《CDN 之我见》系列二:原理篇(缓存、安全)

    2019独角兽企业重金招聘Python工程师标准>>> <CDN之我见>共由三个篇章组成,分为原理篇.详解篇和陨坑篇.本篇章适合那些从未接触过.或仅了解一些 CDN 专业 ...

  8. SEO系列二:何为用户体验?如何做好用户体验?

    昨天写了一篇<SEO系列一:SEO是什么?SEO有什么意义?>的文章,受到了汇道童鞋们的支持和鼓舞,周珍在这里和大家说声谢谢.甚至还有童鞋说期待我写到SEO系列2000,是否能写到2000 ...

  9. 一步步构建多层架构系列二之设计模式运用篇

    上节我们讲到数据对象创建的管理,那么如何管理数据访问类的对象创建呢?先从为什么需要设计模式的原理说起吧 为了更好的理解设计思想,我尽可能的用实例来演示推进.但随着需求的增加,程序将越来越复杂.此时就有 ...

最新文章

  1. 计算机网络Rip例题,计算机网络技术习题
  2. kubernetes英语怎么读_陷阱英语单词怎么读?
  3. SCCM2007 R2的部署前准备,SCCM系列之一
  4. Code Forces 448C Painting Fence 贪婪的递归
  5. angular ts 表格_angular+ng-zorro路由、表格组件
  6. Flutter学习 — 使用不同类型的子项创建列表
  7. 四年级下册英语计算机房和教师办公室的图片,人教版四年级英语下册Unit 1单元知识梳理卷...
  8. Linux进阶之Git分布式版本控制系统篇
  9. QT信号与槽机制与事件机制的区别
  10. 华为无线路由器信道怎么测试软件,华为路由WS5200怎么修改wifi信道
  11. 笔记本电脑f11功能键_笔记本电脑按键功能详细图解_笔记本电脑键盘功能详细介绍是什么-win7之家...
  12. iis7.5如何将应用程序池的启动模式(startMode)从onDemand(需要时)更改为AlwaysRunning(一直运行)?
  13. 总结整理Echarts双y轴曲线图(全)
  14. python 中控考勤机实时接收打卡数据(QThread)
  15. CKA考试总结 20221003
  16. 微信商城小程序WeiMall
  17. Excel如何快速小计求和
  18. airpods pro是按压还是触摸_苹果三代耳机是触摸还是按键
  19. [ShaderGraph]11.小草摇曳效果
  20. python制作的简单的猜数小游戏

热门文章

  1. MindMapper屏幕捕获功能该如何使用
  2. WebRTC开源项目-手把手教你搭建AppRTC
  3. R语言实战学习--回归
  4. 1+x2022年9月16日实操题答案
  5. 2021年6月PMP考试紧急缓考怎么办理?
  6. 【示波器的基本使用】以及【示波器按键面板上各个按键含义的介绍】
  7. android 触摸 唤醒屏幕,android 怎么通过触摸屏幕来唤醒屏幕。
  8. 乐吾乐2D可视化智慧光伏能源赋能方案
  9. 河南移动AI面试 面经
  10. 2553. 【NOIP2011模拟9.7】射命丸文 (Standard IO)