| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623 |
- // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
- // This source code is licensed under both the GPLv2 (found in the
- // COPYING file in the root directory) and Apache 2.0 License
- // (found in the LICENSE.Apache file in the root directory).
- //
- // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file. See the AUTHORS file for names of contributors.
- #include "rocksdb/options.h"
- #include <cinttypes>
- #include <limits>
- #include "monitoring/statistics.h"
- #include "options/db_options.h"
- #include "options/options_helper.h"
- #include "rocksdb/cache.h"
- #include "rocksdb/compaction_filter.h"
- #include "rocksdb/comparator.h"
- #include "rocksdb/env.h"
- #include "rocksdb/memtablerep.h"
- #include "rocksdb/merge_operator.h"
- #include "rocksdb/slice.h"
- #include "rocksdb/slice_transform.h"
- #include "rocksdb/sst_file_manager.h"
- #include "rocksdb/table.h"
- #include "rocksdb/table_properties.h"
- #include "rocksdb/wal_filter.h"
- #include "table/block_based/block_based_table_factory.h"
- #include "util/compression.h"
- namespace ROCKSDB_NAMESPACE {
- AdvancedColumnFamilyOptions::AdvancedColumnFamilyOptions() {
- assert(memtable_factory.get() != nullptr);
- }
- AdvancedColumnFamilyOptions::AdvancedColumnFamilyOptions(const Options& options)
- : max_write_buffer_number(options.max_write_buffer_number),
- min_write_buffer_number_to_merge(
- options.min_write_buffer_number_to_merge),
- max_write_buffer_number_to_maintain(
- options.max_write_buffer_number_to_maintain),
- max_write_buffer_size_to_maintain(
- options.max_write_buffer_size_to_maintain),
- inplace_update_support(options.inplace_update_support),
- inplace_update_num_locks(options.inplace_update_num_locks),
- inplace_callback(options.inplace_callback),
- memtable_prefix_bloom_size_ratio(
- options.memtable_prefix_bloom_size_ratio),
- memtable_whole_key_filtering(options.memtable_whole_key_filtering),
- memtable_huge_page_size(options.memtable_huge_page_size),
- memtable_insert_with_hint_prefix_extractor(
- options.memtable_insert_with_hint_prefix_extractor),
- bloom_locality(options.bloom_locality),
- arena_block_size(options.arena_block_size),
- compression_per_level(options.compression_per_level),
- num_levels(options.num_levels),
- level0_slowdown_writes_trigger(options.level0_slowdown_writes_trigger),
- level0_stop_writes_trigger(options.level0_stop_writes_trigger),
- target_file_size_base(options.target_file_size_base),
- target_file_size_multiplier(options.target_file_size_multiplier),
- level_compaction_dynamic_level_bytes(
- options.level_compaction_dynamic_level_bytes),
- max_bytes_for_level_multiplier(options.max_bytes_for_level_multiplier),
- max_bytes_for_level_multiplier_additional(
- options.max_bytes_for_level_multiplier_additional),
- max_compaction_bytes(options.max_compaction_bytes),
- soft_pending_compaction_bytes_limit(
- options.soft_pending_compaction_bytes_limit),
- hard_pending_compaction_bytes_limit(
- options.hard_pending_compaction_bytes_limit),
- compaction_style(options.compaction_style),
- compaction_pri(options.compaction_pri),
- compaction_options_universal(options.compaction_options_universal),
- compaction_options_fifo(options.compaction_options_fifo),
- max_sequential_skip_in_iterations(
- options.max_sequential_skip_in_iterations),
- memtable_factory(options.memtable_factory),
- table_properties_collector_factories(
- options.table_properties_collector_factories),
- max_successive_merges(options.max_successive_merges),
- optimize_filters_for_hits(options.optimize_filters_for_hits),
- paranoid_file_checks(options.paranoid_file_checks),
- force_consistency_checks(options.force_consistency_checks),
- report_bg_io_stats(options.report_bg_io_stats),
- ttl(options.ttl),
- periodic_compaction_seconds(options.periodic_compaction_seconds),
- sample_for_compression(options.sample_for_compression) {
- assert(memtable_factory.get() != nullptr);
- if (max_bytes_for_level_multiplier_additional.size() <
- static_cast<unsigned int>(num_levels)) {
- max_bytes_for_level_multiplier_additional.resize(num_levels, 1);
- }
- }
- ColumnFamilyOptions::ColumnFamilyOptions()
- : compression(Snappy_Supported() ? kSnappyCompression : kNoCompression),
- table_factory(
- std::shared_ptr<TableFactory>(new BlockBasedTableFactory())) {}
- ColumnFamilyOptions::ColumnFamilyOptions(const Options& options)
- : ColumnFamilyOptions(*static_cast<const ColumnFamilyOptions*>(&options)) {}
- DBOptions::DBOptions() {}
- DBOptions::DBOptions(const Options& options)
- : DBOptions(*static_cast<const DBOptions*>(&options)) {}
- void DBOptions::Dump(Logger* log) const {
- ImmutableDBOptions(*this).Dump(log);
- MutableDBOptions(*this).Dump(log);
- } // DBOptions::Dump
- void ColumnFamilyOptions::Dump(Logger* log) const {
- ROCKS_LOG_HEADER(log, " Options.comparator: %s",
- comparator->Name());
- ROCKS_LOG_HEADER(log, " Options.merge_operator: %s",
- merge_operator ? merge_operator->Name() : "None");
- ROCKS_LOG_HEADER(log, " Options.compaction_filter: %s",
- compaction_filter ? compaction_filter->Name() : "None");
- ROCKS_LOG_HEADER(
- log, " Options.compaction_filter_factory: %s",
- compaction_filter_factory ? compaction_filter_factory->Name() : "None");
- ROCKS_LOG_HEADER(log, " Options.memtable_factory: %s",
- memtable_factory->Name());
- ROCKS_LOG_HEADER(log, " Options.table_factory: %s",
- table_factory->Name());
- ROCKS_LOG_HEADER(log, " table_factory options: %s",
- table_factory->GetPrintableTableOptions().c_str());
- ROCKS_LOG_HEADER(log, " Options.write_buffer_size: %" ROCKSDB_PRIszt,
- write_buffer_size);
- ROCKS_LOG_HEADER(log, " Options.max_write_buffer_number: %d",
- max_write_buffer_number);
- if (!compression_per_level.empty()) {
- for (unsigned int i = 0; i < compression_per_level.size(); i++) {
- ROCKS_LOG_HEADER(
- log, " Options.compression[%d]: %s", i,
- CompressionTypeToString(compression_per_level[i]).c_str());
- }
- } else {
- ROCKS_LOG_HEADER(log, " Options.compression: %s",
- CompressionTypeToString(compression).c_str());
- }
- ROCKS_LOG_HEADER(
- log, " Options.bottommost_compression: %s",
- bottommost_compression == kDisableCompressionOption
- ? "Disabled"
- : CompressionTypeToString(bottommost_compression).c_str());
- ROCKS_LOG_HEADER(
- log, " Options.prefix_extractor: %s",
- prefix_extractor == nullptr ? "nullptr" : prefix_extractor->Name());
- ROCKS_LOG_HEADER(log,
- " Options.memtable_insert_with_hint_prefix_extractor: %s",
- memtable_insert_with_hint_prefix_extractor == nullptr
- ? "nullptr"
- : memtable_insert_with_hint_prefix_extractor->Name());
- ROCKS_LOG_HEADER(log, " Options.num_levels: %d", num_levels);
- ROCKS_LOG_HEADER(log, " Options.min_write_buffer_number_to_merge: %d",
- min_write_buffer_number_to_merge);
- ROCKS_LOG_HEADER(log, " Options.max_write_buffer_number_to_maintain: %d",
- max_write_buffer_number_to_maintain);
- ROCKS_LOG_HEADER(log,
- " Options.max_write_buffer_size_to_maintain: %" PRIu64,
- max_write_buffer_size_to_maintain);
- ROCKS_LOG_HEADER(
- log, " Options.bottommost_compression_opts.window_bits: %d",
- bottommost_compression_opts.window_bits);
- ROCKS_LOG_HEADER(
- log, " Options.bottommost_compression_opts.level: %d",
- bottommost_compression_opts.level);
- ROCKS_LOG_HEADER(
- log, " Options.bottommost_compression_opts.strategy: %d",
- bottommost_compression_opts.strategy);
- ROCKS_LOG_HEADER(
- log,
- " Options.bottommost_compression_opts.max_dict_bytes: "
- "%" PRIu32,
- bottommost_compression_opts.max_dict_bytes);
- ROCKS_LOG_HEADER(
- log,
- " Options.bottommost_compression_opts.zstd_max_train_bytes: "
- "%" PRIu32,
- bottommost_compression_opts.zstd_max_train_bytes);
- ROCKS_LOG_HEADER(
- log, " Options.bottommost_compression_opts.enabled: %s",
- bottommost_compression_opts.enabled ? "true" : "false");
- ROCKS_LOG_HEADER(log, " Options.compression_opts.window_bits: %d",
- compression_opts.window_bits);
- ROCKS_LOG_HEADER(log, " Options.compression_opts.level: %d",
- compression_opts.level);
- ROCKS_LOG_HEADER(log, " Options.compression_opts.strategy: %d",
- compression_opts.strategy);
- ROCKS_LOG_HEADER(
- log,
- " Options.compression_opts.max_dict_bytes: %" PRIu32,
- compression_opts.max_dict_bytes);
- ROCKS_LOG_HEADER(log,
- " Options.compression_opts.zstd_max_train_bytes: "
- "%" PRIu32,
- compression_opts.zstd_max_train_bytes);
- ROCKS_LOG_HEADER(log,
- " Options.compression_opts.enabled: %s",
- compression_opts.enabled ? "true" : "false");
- ROCKS_LOG_HEADER(log, " Options.level0_file_num_compaction_trigger: %d",
- level0_file_num_compaction_trigger);
- ROCKS_LOG_HEADER(log, " Options.level0_slowdown_writes_trigger: %d",
- level0_slowdown_writes_trigger);
- ROCKS_LOG_HEADER(log, " Options.level0_stop_writes_trigger: %d",
- level0_stop_writes_trigger);
- ROCKS_LOG_HEADER(
- log, " Options.target_file_size_base: %" PRIu64,
- target_file_size_base);
- ROCKS_LOG_HEADER(log, " Options.target_file_size_multiplier: %d",
- target_file_size_multiplier);
- ROCKS_LOG_HEADER(
- log, " Options.max_bytes_for_level_base: %" PRIu64,
- max_bytes_for_level_base);
- ROCKS_LOG_HEADER(log, "Options.level_compaction_dynamic_level_bytes: %d",
- level_compaction_dynamic_level_bytes);
- ROCKS_LOG_HEADER(log, " Options.max_bytes_for_level_multiplier: %f",
- max_bytes_for_level_multiplier);
- for (size_t i = 0; i < max_bytes_for_level_multiplier_additional.size();
- i++) {
- ROCKS_LOG_HEADER(
- log, "Options.max_bytes_for_level_multiplier_addtl[%" ROCKSDB_PRIszt
- "]: %d",
- i, max_bytes_for_level_multiplier_additional[i]);
- }
- ROCKS_LOG_HEADER(
- log, " Options.max_sequential_skip_in_iterations: %" PRIu64,
- max_sequential_skip_in_iterations);
- ROCKS_LOG_HEADER(
- log, " Options.max_compaction_bytes: %" PRIu64,
- max_compaction_bytes);
- ROCKS_LOG_HEADER(
- log,
- " Options.arena_block_size: %" ROCKSDB_PRIszt,
- arena_block_size);
- ROCKS_LOG_HEADER(log,
- " Options.soft_pending_compaction_bytes_limit: %" PRIu64,
- soft_pending_compaction_bytes_limit);
- ROCKS_LOG_HEADER(log,
- " Options.hard_pending_compaction_bytes_limit: %" PRIu64,
- hard_pending_compaction_bytes_limit);
- ROCKS_LOG_HEADER(log, " Options.rate_limit_delay_max_milliseconds: %u",
- rate_limit_delay_max_milliseconds);
- ROCKS_LOG_HEADER(log, " Options.disable_auto_compactions: %d",
- disable_auto_compactions);
- const auto& it_compaction_style =
- compaction_style_to_string.find(compaction_style);
- std::string str_compaction_style;
- if (it_compaction_style == compaction_style_to_string.end()) {
- assert(false);
- str_compaction_style = "unknown_" + std::to_string(compaction_style);
- } else {
- str_compaction_style = it_compaction_style->second;
- }
- ROCKS_LOG_HEADER(log,
- " Options.compaction_style: %s",
- str_compaction_style.c_str());
- const auto& it_compaction_pri =
- compaction_pri_to_string.find(compaction_pri);
- std::string str_compaction_pri;
- if (it_compaction_pri == compaction_pri_to_string.end()) {
- assert(false);
- str_compaction_pri = "unknown_" + std::to_string(compaction_pri);
- } else {
- str_compaction_pri = it_compaction_pri->second;
- }
- ROCKS_LOG_HEADER(log,
- " Options.compaction_pri: %s",
- str_compaction_pri.c_str());
- ROCKS_LOG_HEADER(log,
- "Options.compaction_options_universal.size_ratio: %u",
- compaction_options_universal.size_ratio);
- ROCKS_LOG_HEADER(log,
- "Options.compaction_options_universal.min_merge_width: %u",
- compaction_options_universal.min_merge_width);
- ROCKS_LOG_HEADER(log,
- "Options.compaction_options_universal.max_merge_width: %u",
- compaction_options_universal.max_merge_width);
- ROCKS_LOG_HEADER(
- log,
- "Options.compaction_options_universal."
- "max_size_amplification_percent: %u",
- compaction_options_universal.max_size_amplification_percent);
- ROCKS_LOG_HEADER(
- log,
- "Options.compaction_options_universal.compression_size_percent: %d",
- compaction_options_universal.compression_size_percent);
- const auto& it_compaction_stop_style = compaction_stop_style_to_string.find(
- compaction_options_universal.stop_style);
- std::string str_compaction_stop_style;
- if (it_compaction_stop_style == compaction_stop_style_to_string.end()) {
- assert(false);
- str_compaction_stop_style =
- "unknown_" + std::to_string(compaction_options_universal.stop_style);
- } else {
- str_compaction_stop_style = it_compaction_stop_style->second;
- }
- ROCKS_LOG_HEADER(log,
- "Options.compaction_options_universal.stop_style: %s",
- str_compaction_stop_style.c_str());
- ROCKS_LOG_HEADER(
- log, "Options.compaction_options_fifo.max_table_files_size: %" PRIu64,
- compaction_options_fifo.max_table_files_size);
- ROCKS_LOG_HEADER(log,
- "Options.compaction_options_fifo.allow_compaction: %d",
- compaction_options_fifo.allow_compaction);
- std::string collector_names;
- for (const auto& collector_factory : table_properties_collector_factories) {
- collector_names.append(collector_factory->Name());
- collector_names.append("; ");
- }
- ROCKS_LOG_HEADER(
- log, " Options.table_properties_collectors: %s",
- collector_names.c_str());
- ROCKS_LOG_HEADER(log,
- " Options.inplace_update_support: %d",
- inplace_update_support);
- ROCKS_LOG_HEADER(
- log,
- " Options.inplace_update_num_locks: %" ROCKSDB_PRIszt,
- inplace_update_num_locks);
- // TODO: easier config for bloom (maybe based on avg key/value size)
- ROCKS_LOG_HEADER(
- log, " Options.memtable_prefix_bloom_size_ratio: %f",
- memtable_prefix_bloom_size_ratio);
- ROCKS_LOG_HEADER(log,
- " Options.memtable_whole_key_filtering: %d",
- memtable_whole_key_filtering);
- ROCKS_LOG_HEADER(log, " Options.memtable_huge_page_size: %" ROCKSDB_PRIszt,
- memtable_huge_page_size);
- ROCKS_LOG_HEADER(log,
- " Options.bloom_locality: %d",
- bloom_locality);
- ROCKS_LOG_HEADER(
- log,
- " Options.max_successive_merges: %" ROCKSDB_PRIszt,
- max_successive_merges);
- ROCKS_LOG_HEADER(log,
- " Options.optimize_filters_for_hits: %d",
- optimize_filters_for_hits);
- ROCKS_LOG_HEADER(log, " Options.paranoid_file_checks: %d",
- paranoid_file_checks);
- ROCKS_LOG_HEADER(log, " Options.force_consistency_checks: %d",
- force_consistency_checks);
- ROCKS_LOG_HEADER(log, " Options.report_bg_io_stats: %d",
- report_bg_io_stats);
- ROCKS_LOG_HEADER(log, " Options.ttl: %" PRIu64,
- ttl);
- ROCKS_LOG_HEADER(log,
- " Options.periodic_compaction_seconds: %" PRIu64,
- periodic_compaction_seconds);
- } // ColumnFamilyOptions::Dump
- void Options::Dump(Logger* log) const {
- DBOptions::Dump(log);
- ColumnFamilyOptions::Dump(log);
- } // Options::Dump
- void Options::DumpCFOptions(Logger* log) const {
- ColumnFamilyOptions::Dump(log);
- } // Options::DumpCFOptions
- //
- // The goal of this method is to create a configuration that
- // allows an application to write all files into L0 and
- // then do a single compaction to output all files into L1.
- Options*
- Options::PrepareForBulkLoad()
- {
- // never slowdown ingest.
- level0_file_num_compaction_trigger = (1<<30);
- level0_slowdown_writes_trigger = (1<<30);
- level0_stop_writes_trigger = (1<<30);
- soft_pending_compaction_bytes_limit = 0;
- hard_pending_compaction_bytes_limit = 0;
- // no auto compactions please. The application should issue a
- // manual compaction after all data is loaded into L0.
- disable_auto_compactions = true;
- // A manual compaction run should pick all files in L0 in
- // a single compaction run.
- max_compaction_bytes = (static_cast<uint64_t>(1) << 60);
- // It is better to have only 2 levels, otherwise a manual
- // compaction would compact at every possible level, thereby
- // increasing the total time needed for compactions.
- num_levels = 2;
- // Need to allow more write buffers to allow more parallism
- // of flushes.
- max_write_buffer_number = 6;
- min_write_buffer_number_to_merge = 1;
- // When compaction is disabled, more parallel flush threads can
- // help with write throughput.
- max_background_flushes = 4;
- // Prevent a memtable flush to automatically promote files
- // to L1. This is helpful so that all files that are
- // input to the manual compaction are all at L0.
- max_background_compactions = 2;
- // The compaction would create large files in L1.
- target_file_size_base = 256 * 1024 * 1024;
- return this;
- }
- Options* Options::OptimizeForSmallDb() {
- // 16MB block cache
- std::shared_ptr<Cache> cache = NewLRUCache(16 << 20);
- ColumnFamilyOptions::OptimizeForSmallDb(&cache);
- DBOptions::OptimizeForSmallDb(&cache);
- return this;
- }
- Options* Options::OldDefaults(int rocksdb_major_version,
- int rocksdb_minor_version) {
- ColumnFamilyOptions::OldDefaults(rocksdb_major_version,
- rocksdb_minor_version);
- DBOptions::OldDefaults(rocksdb_major_version, rocksdb_minor_version);
- return this;
- }
- DBOptions* DBOptions::OldDefaults(int rocksdb_major_version,
- int rocksdb_minor_version) {
- if (rocksdb_major_version < 4 ||
- (rocksdb_major_version == 4 && rocksdb_minor_version < 7)) {
- max_file_opening_threads = 1;
- table_cache_numshardbits = 4;
- }
- if (rocksdb_major_version < 5 ||
- (rocksdb_major_version == 5 && rocksdb_minor_version < 2)) {
- delayed_write_rate = 2 * 1024U * 1024U;
- } else if (rocksdb_major_version < 5 ||
- (rocksdb_major_version == 5 && rocksdb_minor_version < 6)) {
- delayed_write_rate = 16 * 1024U * 1024U;
- }
- max_open_files = 5000;
- wal_recovery_mode = WALRecoveryMode::kTolerateCorruptedTailRecords;
- return this;
- }
- ColumnFamilyOptions* ColumnFamilyOptions::OldDefaults(
- int rocksdb_major_version, int rocksdb_minor_version) {
- if (rocksdb_major_version < 5 ||
- (rocksdb_major_version == 5 && rocksdb_minor_version <= 18)) {
- compaction_pri = CompactionPri::kByCompensatedSize;
- }
- if (rocksdb_major_version < 4 ||
- (rocksdb_major_version == 4 && rocksdb_minor_version < 7)) {
- write_buffer_size = 4 << 20;
- target_file_size_base = 2 * 1048576;
- max_bytes_for_level_base = 10 * 1048576;
- soft_pending_compaction_bytes_limit = 0;
- hard_pending_compaction_bytes_limit = 0;
- }
- if (rocksdb_major_version < 5) {
- level0_stop_writes_trigger = 24;
- } else if (rocksdb_major_version == 5 && rocksdb_minor_version < 2) {
- level0_stop_writes_trigger = 30;
- }
- return this;
- }
- // Optimization functions
- DBOptions* DBOptions::OptimizeForSmallDb(std::shared_ptr<Cache>* cache) {
- max_file_opening_threads = 1;
- max_open_files = 5000;
- // Cost memtable to block cache too.
- std::shared_ptr<ROCKSDB_NAMESPACE::WriteBufferManager> wbm =
- std::make_shared<ROCKSDB_NAMESPACE::WriteBufferManager>(
- 0, (cache != nullptr) ? *cache : std::shared_ptr<Cache>());
- write_buffer_manager = wbm;
- return this;
- }
- ColumnFamilyOptions* ColumnFamilyOptions::OptimizeForSmallDb(
- std::shared_ptr<Cache>* cache) {
- write_buffer_size = 2 << 20;
- target_file_size_base = 2 * 1048576;
- max_bytes_for_level_base = 10 * 1048576;
- soft_pending_compaction_bytes_limit = 256 * 1048576;
- hard_pending_compaction_bytes_limit = 1073741824ul;
- BlockBasedTableOptions table_options;
- table_options.block_cache =
- (cache != nullptr) ? *cache : std::shared_ptr<Cache>();
- table_options.cache_index_and_filter_blocks = true;
- // Two level iterator to avoid LRU cache imbalance
- table_options.index_type =
- BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch;
- table_factory.reset(new BlockBasedTableFactory(table_options));
- return this;
- }
- #ifndef ROCKSDB_LITE
- ColumnFamilyOptions* ColumnFamilyOptions::OptimizeForPointLookup(
- uint64_t block_cache_size_mb) {
- BlockBasedTableOptions block_based_options;
- block_based_options.data_block_index_type =
- BlockBasedTableOptions::kDataBlockBinaryAndHash;
- block_based_options.data_block_hash_table_util_ratio = 0.75;
- block_based_options.filter_policy.reset(NewBloomFilterPolicy(10));
- block_based_options.block_cache =
- NewLRUCache(static_cast<size_t>(block_cache_size_mb * 1024 * 1024));
- table_factory.reset(new BlockBasedTableFactory(block_based_options));
- memtable_prefix_bloom_size_ratio = 0.02;
- memtable_whole_key_filtering = true;
- return this;
- }
- ColumnFamilyOptions* ColumnFamilyOptions::OptimizeLevelStyleCompaction(
- uint64_t memtable_memory_budget) {
- write_buffer_size = static_cast<size_t>(memtable_memory_budget / 4);
- // merge two memtables when flushing to L0
- min_write_buffer_number_to_merge = 2;
- // this means we'll use 50% extra memory in the worst case, but will reduce
- // write stalls.
- max_write_buffer_number = 6;
- // start flushing L0->L1 as soon as possible. each file on level0 is
- // (memtable_memory_budget / 2). This will flush level 0 when it's bigger than
- // memtable_memory_budget.
- level0_file_num_compaction_trigger = 2;
- // doesn't really matter much, but we don't want to create too many files
- target_file_size_base = memtable_memory_budget / 8;
- // make Level1 size equal to Level0 size, so that L0->L1 compactions are fast
- max_bytes_for_level_base = memtable_memory_budget;
- // level style compaction
- compaction_style = kCompactionStyleLevel;
- // only compress levels >= 2
- compression_per_level.resize(num_levels);
- for (int i = 0; i < num_levels; ++i) {
- if (i < 2) {
- compression_per_level[i] = kNoCompression;
- } else {
- compression_per_level[i] =
- LZ4_Supported()
- ? kLZ4Compression
- : (Snappy_Supported() ? kSnappyCompression : kNoCompression);
- }
- }
- return this;
- }
- ColumnFamilyOptions* ColumnFamilyOptions::OptimizeUniversalStyleCompaction(
- uint64_t memtable_memory_budget) {
- write_buffer_size = static_cast<size_t>(memtable_memory_budget / 4);
- // merge two memtables when flushing to L0
- min_write_buffer_number_to_merge = 2;
- // this means we'll use 50% extra memory in the worst case, but will reduce
- // write stalls.
- max_write_buffer_number = 6;
- // universal style compaction
- compaction_style = kCompactionStyleUniversal;
- compaction_options_universal.compression_size_percent = 80;
- return this;
- }
- DBOptions* DBOptions::IncreaseParallelism(int total_threads) {
- max_background_jobs = total_threads;
- env->SetBackgroundThreads(total_threads, Env::LOW);
- env->SetBackgroundThreads(1, Env::HIGH);
- return this;
- }
- #endif // !ROCKSDB_LITE
- ReadOptions::ReadOptions()
- : snapshot(nullptr),
- iterate_lower_bound(nullptr),
- iterate_upper_bound(nullptr),
- readahead_size(0),
- max_skippable_internal_keys(0),
- read_tier(kReadAllTier),
- verify_checksums(true),
- fill_cache(true),
- tailing(false),
- managed(false),
- total_order_seek(false),
- auto_prefix_mode(false),
- prefix_same_as_start(false),
- pin_data(false),
- background_purge_on_iterator_cleanup(false),
- ignore_range_deletions(false),
- iter_start_seqnum(0),
- timestamp(nullptr) {}
- ReadOptions::ReadOptions(bool cksum, bool cache)
- : snapshot(nullptr),
- iterate_lower_bound(nullptr),
- iterate_upper_bound(nullptr),
- readahead_size(0),
- max_skippable_internal_keys(0),
- read_tier(kReadAllTier),
- verify_checksums(cksum),
- fill_cache(cache),
- tailing(false),
- managed(false),
- total_order_seek(false),
- auto_prefix_mode(false),
- prefix_same_as_start(false),
- pin_data(false),
- background_purge_on_iterator_cleanup(false),
- ignore_range_deletions(false),
- iter_start_seqnum(0),
- timestamp(nullptr) {}
- } // namespace ROCKSDB_NAMESPACE
|