improvement: optimize rocksdb for spinning disks
@@ -20,8 +20,20 @@ fn db_options(cache_capacity_bytes: usize, rocksdb_cache: &rocksdb::Cache) -> ro
let mut block_based_options = rocksdb::BlockBasedOptions::default();
block_based_options.set_block_cache(rocksdb_cache);
+ // "Difference of spinning disk"
+ // https://zhangyuchi.gitbooks.io/rocksdbbook/content/RocksDB-Tuning-Guide.html
+ block_based_options.set_block_size(64 * 1024);
+ block_based_options.set_cache_index_and_filter_blocks(true);
+
let mut db_opts = rocksdb::Options::default();
db_opts.set_block_based_table_factory(&block_based_options);
+ db_opts.set_optimize_filters_for_hits(true);
+ db_opts.set_skip_stats_update_on_db_open(true);
+ db_opts.set_level_compaction_dynamic_level_bytes(true);
+ db_opts.set_target_file_size_base(256 * 1024 * 1024);
+ db_opts.set_compaction_readahead_size(2 * 1024 * 1024);
+ db_opts.set_use_direct_reads(true);
+ db_opts.set_use_direct_io_for_flush_and_compaction(true);
db_opts.create_if_missing(true);
db_opts.increase_parallelism(num_cpus::get() as i32);
db_opts.set_max_open_files(512);
