Skip to content

Add Rocksdb as a db option. #3831

@Stumble

Description

@Stumble

We tried to use rocksdb as our storage db, see https://github.com/lino-network/tendermint/commits/yumin/rocksdb. The result shows that rocksDB, under our configuration, is better than cLevelDB in terms of total sync time and result db data size.

The rocksdb is configured with a large write buffer size and use zSTD as compression algorithm with dictionary compression enabled. We started a node with the above branch, and synced from height 0 to 3M+, (Lino network's data https://tracker.lino.network/#/).

Comparison with clevelDB

|               | rocksdb   | cleveldb  |
|---------------|-----------|-----------|
| TotalDataSize | 64GB      | 101GB     |
| SyncTime      | ~100Hours | ~170Hours |

We would like to add it as an option for db in tendermint. However, rocksDB is featured with very flexible configuration. Our configuration may not fit the needs of applications. So, there should be a way for application to configure it. Is the conf.toml file a good place for it? Or we just provide a general solution for all applications?

Our Rocksdb configuration:


[/column_family.cc:477] --------------- Options for column family [default]:
              Options.comparator: leveldb.BytewiseComparator
          Options.merge_operator: None
       Options.compaction_filter: None
       Options.compaction_filter_factory: None
        Options.memtable_factory: SkipListFactory
           Options.table_factory: BlockBasedTable
           table_factory options:   flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x3cdb370)
  cache_index_and_filter_blocks: 1
  cache_index_and_filter_blocks_with_high_priority: 0
  pin_l0_filter_and_index_blocks_in_cache: 1
  pin_top_level_index_and_filter: 1
  index_type: 0
  data_block_index_type: 0
  data_block_hash_table_util_ratio: 0.750000
  hash_index_allow_collision: 1
  checksum: 1
  no_block_cache: 0
  block_cache: 0x3cce400
  block_cache_name: LRUCache
  block_cache_options:
    capacity : 4294967296
    num_shard_bits : 6
    strict_capacity_limit : 0
    memory_allocator : None
    high_pri_pool_ratio: 0.000
  block_cache_compressed: (nil)
  persistent_cache: (nil)
  block_size: 65536
  block_size_deviation: 10
  block_restart_interval: 16
  index_block_restart_interval: 1
  metadata_block_size: 4096
  partition_filters: 0
  use_delta_encoding: 1
  filter_policy: rocksdb.BuiltinBloomFilter
  whole_key_filtering: 1
  verify_compression: 0
  read_amp_bytes_per_bit: 0
  format_version: 2
  enable_index_compression: 1
  block_align: 0
       Options.write_buffer_size: 268435456
 Options.max_write_buffer_number: 4
         Options.compression: ZSTD
                 Options.bottommost_compression: ZSTD
      Options.prefix_extractor: nullptr
  Options.memtable_insert_with_hint_prefix_extractor: nullptr
            Options.num_levels: 7
       Options.min_write_buffer_number_to_merge: 1
    Options.max_write_buffer_number_to_maintain: 0
           Options.bottommost_compression_opts.window_bits: -14
                 Options.bottommost_compression_opts.level: 3
              Options.bottommost_compression_opts.strategy: 0
        Options.bottommost_compression_opts.max_dict_bytes: 262144
        Options.bottommost_compression_opts.zstd_max_train_bytes: 10485760
                 Options.bottommost_compression_opts.enabled: true
           Options.compression_opts.window_bits: -14
                 Options.compression_opts.level: 3
              Options.compression_opts.strategy: 0
        Options.compression_opts.max_dict_bytes: 262144
        Options.compression_opts.zstd_max_train_bytes: 10485760
                 Options.compression_opts.enabled: true
     Options.level0_file_num_compaction_trigger: 4
         Options.level0_slowdown_writes_trigger: 12
             Options.level0_stop_writes_trigger: 20
                  Options.target_file_size_base: 134217728
            Options.target_file_size_multiplier: 1
               Options.max_bytes_for_level_base: 1073741824
Options.level_compaction_dynamic_level_bytes: 1
         Options.max_bytes_for_level_multiplier: 8.000000
Options.max_bytes_for_level_multiplier_addtl[0]: 1
Options.max_bytes_for_level_multiplier_addtl[1]: 1
Options.max_bytes_for_level_multiplier_addtl[2]: 1
Options.max_bytes_for_level_multiplier_addtl[3]: 1
Options.max_bytes_for_level_multiplier_addtl[4]: 1
Options.max_bytes_for_level_multiplier_addtl[5]: 1
Options.max_bytes_for_level_multiplier_addtl[6]: 1
      Options.max_sequential_skip_in_iterations: 8
                   Options.max_compaction_bytes: 3355443200
                       Options.arena_block_size: 33554432
  Options.soft_pending_compaction_bytes_limit: 68719476736
  Options.hard_pending_compaction_bytes_limit: 274877906944
      Options.rate_limit_delay_max_milliseconds: 100
               Options.disable_auto_compactions: 0
                       Options.compaction_style: kCompactionStyleLevel
                         Options.compaction_pri: kMinOverlappingRatio
Options.compaction_options_universal.size_ratio: 1
Options.compaction_options_universal.min_merge_width: 2
Options.compaction_options_universal.max_merge_width: 4294967295
Options.compaction_options_universal.max_size_amplification_percent: 200
Options.compaction_options_universal.compression_size_percent: -1
Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize
Options.compaction_options_fifo.max_table_files_size: 1073741824
Options.compaction_options_fifo.allow_compaction: 0
                  Options.table_properties_collectors: 
                  Options.inplace_update_support: 0
                Options.inplace_update_num_locks: 10000
              Options.memtable_prefix_bloom_size_ratio: 0.000000
              Options.memtable_whole_key_filtering: 0
  Options.memtable_huge_page_size: 0
                          Options.bloom_locality: 0
                   Options.max_successive_merges: 0
               Options.optimize_filters_for_hits: 0
               Options.paranoid_file_checks: 0
               Options.force_consistency_checks: 0
               Options.report_bg_io_stats: 0
                              Options.ttl: 0

Metadata

Metadata

Assignees

No one assigned

    Labels

    C:libsComponent: LibraryT:perfType: Performance

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions