rocksdb-doc-cn

通过DB::CompactRange 或者 DB::CompactFiles,可以手动触发压缩。这是给高级用户开发自定义压缩策略使用的,包括但不限于以下使用方法:

下面的例子展现如何使用这些API。

Options dbOptions;

DB* db;
Status s = DB::Open(dbOptions, "/tmp/rocksdb",  &db);

// Write some data
...
Slice begin("key1");
Slice end("key100");
CompactRangeOptions options;

s = db->CompactRange(options, &begin, &end);

或者

CompactionOptions options;
std::vector<std::string> input_file_names;
int output_level;
...
Status s = db->CompactFiles(options, input_file_names, output_level);

CompactRange

begin和end参数定义需要压缩的key的范围。根据db使用的压缩风格而有不同的行为。在universal和FIFO压缩风格,begin和end参数会被忽略,所有文件都会被压缩。另外,每一层的文件都会被压缩,并且留在本层。对于leveled压缩风格,所有包含有key范围的文件都会被压缩到最底层。如果begin或者end为NULL,这意味着使用第一个的key或者最后一个的key。

如果多于一个线程调用了人工压缩,只有一个会真正被调度,而其他线程会等待已经调度的压缩完成。如果CompactRangeOptions::exclusive_manual_compaction被设置为true,调用会禁止自动压缩工作的调度,然后等待已经开始的自动压缩工作停止。

CompactRangeOptions支持以下选项:

CompactFiles

这个接口会压缩所有输入文件到一系列输出文件,然后放在output_level中。输出文件的大小取决于数据的大小以及CompactionOptions::output_file_size_limit的设定。这个API在ROCKSDB_LITE里面不支持。

看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢! 你的评论非常重要!也可以帮忙点赞收藏转发!多谢支持! 觉得写的不错那就给点吧, 在线乞讨 微信转账