- Optimize for read heavy workloads by compacting to lowest level after ingesting a large amount of data
- Force the data to go through the compaction filter in order to consolidate it
The example code below shows how to use the APIs.
CompactionOptions options;
std::vector<std::string> input_file_names;
int output_level;
Status s = db->CompactFiles(options, input_file_names, output_level);
The begin
and arguments define the key range to be compacted. The behavior varies depending on the compaction style being used by the db. In case of universal and FIFO compaction styles, the begin
and end
arguments are ignored and all files are compacted. Also, files in each level are compacted and left in the same level. For leveled compaction style, all files containing keys in the given range are compacted to the last level containing files. If either begin
or end
are NULL, it is taken to mean the key before all keys in the db or the key after all keys respectively.
DB::CompactRange
waits while compaction is performed on the background threads and thus is a blocking call.
CompactRangeOptions::exclusive_manual_compaction
When set to true, no other compaction will run when this manual compaction is running. Default value isCompactRangeOptions::change_level
,CompactRangeOptions::target_level
Together, these options control the level where the compacted files will be placed. Iftarget_level
is -1, the compacted files will be moved to the minimum level whose computed max_bytes is still large enough to hold the files. Intermediate levels must be empty. For example, if the files were initially compacted to L5 and L2 is the minimum level large enough to hold the files, they will be placed in L2 if L3 and L4 are empty or in L4 if L3 is non-empty. Iftarget_level
is positive, the compacted files will be placed in that level provided intermediate levels are empty. If any any of the intermediate levels are not empty, the compacted files will be left where they are.CompactRangeOptions::bottommost_level_compaction
When set toBottommostLevelCompaction::kSkip
, or when set toBottommostLevelCompaction::kIfHaveCompactionFilter
and a compaction filter is defined for the column family, the bottommost level files are not compacted.
CompactFiles
This API compacts all the input files into a set of output files in the . The number of output files is determined by the size of the data and the setting of CompactionOptions::output_file_size_limit
. This API is not supported in ROCKSDB_LITE.