rocksdb

本文详细分析了RocksDB在不同参数配置下的性能表现,包括网络吞吐量与磁盘写入量的关系、初始化参数的重要性、多线程写入效率以及大数量条目DB的启动时自检时间。通过调整关键参数,如初始化文件数、cache及队列大小,以及优化压缩线程的运行策略,实现了显著的性能提升。同时,针对并发写入场景,探讨了如何通过合理的参数设置来平衡读写性能,最终在特定硬件环境下(如Dell T5600服务器)实现更高效的数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. key随机插入导致rocksdb有较大的写放大。 6MB的网络吞吐量,50+MB的磁盘写入。(原因待查)

    改为顺序插入,6MB的网络吞吐量,10-20+的磁盘写入。

 

2. 初始化传参很重要,文件数、cache及队列大小等。(细节待总结)

 

3. 多线程写入效率待查。

 

4.大数量条目的DB,启动时自检时间较长。第一次重启时,10,000,000需要10s,,50,000,000需要2min,100,000,000需要1小时。

 

=====================================================

 

1、初始化参数: class Options(负责数据存储的组织),  class Env/PosixEnv(负责文件操作的调度)。db_bench的参考意义很大。

level0_file_num_compaction_trigger   4
level0_slowdown_writes_trigger       16(-1)
level0_stop_writes_trigger           64


target_file_size_base  64M
target_file_size_multiplier 1

max_bytes_for_level_base 512M
max_bytes_for_level_multiplier 10

disableDataSync    load数据时候用

max_background_compactions 20
max_write_buffer_number   3
rate_limit_delay_max_milliseconds 1000

arena_block_size  write_buffer_size / 10
write_buffer_size   128M

open_files    500000
block_cache_size  16G 初始化时指定的

delete_obsolete_files_period_micros 300s


*******************************
statistics
stats_interval
stats_per_interval

 

 

***********************************
min_level_to_compress
merge_operator
mmap_read
mmap_write
sync (maybe write option)
table_cache_numshardbits
use_fsync
use_multiget
max_background_flushes

//write-ahead logs (WAL)
wal_size_limit_MB
wal_ttl_seconds
disable_seek_compaction  //TODO
disable_wal

block_cache
block_cache_compressed

compression_level
compression_ratio

CompactionOptionsUniversal=======
universal_compression_size_percent
universal_max_merge_width
universal_max_size_amplification_percent
universal_min_merge_width
universal_size_ratio

table_cache_numshardbits 4
min_write_buffer_number_to_merge (1 default????)

use_adaptive_mutex (false default。节省系统和用户切换)

max_bytes_for_level_multiplier_additional  1(向量)

hard_rate_limit   0.0
soft_rate_limit   0.0

********************************************
db_bench*********************************
histogram
memtablerep
statistics
threads

num
numdistinct
read_range
readonly
reads
readwritepercent
use_existing_db
value_size
warn_missing_keys
writes
writes_per_second

 

2、get对压缩线程的运行很敏感,性能抖动很大。但是压缩线程是必须的,负责维持level的平衡。

3、读写性能的平衡难于把握。目前的配置下read:update:  50:50, 25000ops,  95:5, 30000ops
 

Dell T5600

CPU: Intel(R) Xeon(R) CPU E5-2650 @ 2.00GHz/8 cores

RAM: 64GB

OS: CentOS 6.4

 
 write_threads: 1
 read_threads: 8

# in GB
 cache_size: 48
 # in KB
 block_size: 32
 # in MB
 write_buffer_size: 128
 # yes|no
 compression: yes
 # default 200
 max_open_files: 5000
 # in MB
 target_file_size_base: 64
 # in MB
 max_bytes_for_level_base: 512
 # yes|no
 disableDataSync: no
 #Speed strategy
 level0_file_num_compaction_trigger: 4
 level0_slowdown_writes_trigger: 16
 level0_stop_writes_trigger: 64
 #just for bulk loading data: yes|no
 disableDataSync:  no
 max_background_compactions: 8
 max_write_buffer_number: 8
 rate_limit_delay_max_milliseconds: 1000
 # in KB, write_buffer_size / 10
 arena_block_size: 12800
 # in second
 delete_obsolete_files_period_micros: 300

 

RocksDB 是一个高效的嵌入式键值存储引擎,广泛用于需要高性能读写操作的场景。它最初由 Facebook 开发,基于 Google 的 LevelDB 项目,并进行了量优化以支持现代硬件环境,特别是 SSD 存储介质。 ### 功能特性 RocksDB 提供了丰富的功能,包括但不限于: - **多线程压缩**:通过并行处理 SST 文件的压缩任务来提高吞吐量。 - **内存管理**:提供了多种机制来控制内存使用,比如 block cache 和 memtable 的小调整。 - **快照与事务**:支持快照隔离级别的一致性视图和 ACID 事务[^3]。 - **列族(Column Families)**:允许将数据逻辑上划分为不同的列族,每个列族可以独立配置选项,这为不同类型的数据显示了灵活性[^3]。 ### 使用教程 要开始使用 RocksDB,首先需要安装库文件。对于 C++ 开发者来说,可以通过源码编译安装或者利用包管理器进行安装。Python 用户则可以借助 `python-rocksdb` 这样的第三方模块。 以下是一个简单的 RocksDB 数据库创建和基本操作的例子: ```cpp #include <rocksdb/db.h> #include <rocksdb/options.h> int main() { rocksdb::DB* db; rocksdb::Options options; // Optimize RocksDB. This is important for performance. options.IncreaseParallelism(); options.OptimizeLevelStyleCompaction(); // create the DB if it's not already present options.create_if_missing = true; // open DB rocksdb::Status status = rocksdb::DB::Open(options, "/tmp/testdb", &db); assert(status.ok()); // put key-value status = db->Put(rocksdb::WriteOptions(), "key1", "value"); assert(status.ok()); std::string value; // get value status = db->Get(rocksdb::ReadOptions(), "key1", &value); assert(status.ok()); assert(value == "value"); // delete database object before exit delete db; return 0; } ``` ### 性能优化 为了获得最佳性能,对 RocksDB 的参数进行调优是必要的。例如,调整内存相关的设置如 `write_buffer_size` 和 `max_write_buffer_number` 可以影响写入性能;而 `block_cache_size` 则会影响读取速度。此外,还可以根据工作负载的特点选择合适的压缩算法和策略。 在 Flink 中使用 RocksDB 作为状态后端时,可以通过修改配置文件中的参数来进行调优,比如增加 `state.backend.rocksdb.memory.managed` 设置为 `true` 来启用托管内存模式,从而让 Flink 更好地管理和限制 RocksDB内存占用[^2]。 ### 应用场景 RocksDB 被设计成可以在各种环境中高效运行,尤其是在那些要求低延迟、高吞吐量以及规模数据集的情况下。典型的应用场景包括: - **分布式数据库系统**:如 TiKV 和其他分布式数据库系统采用 RocksDB 作为底层存储引擎,因为其出色的性能表现和对 LSM-Tree 结构的支持。 - **实时数据分析平台**:Apache Flink 等流处理框架中,RocksDB 常被用作状态后端,因为它能够很好地处理连续不断的数据流带来的状态更新需求[^1]。 - **缓存服务**:由于 RocksDB 支持快速查找且具有良好的压缩特性,因此也非常适合用来构建本地缓存解决方案。 以上只是关于 RocksDB 的简要介绍及其一些核心方面的概述。实际应用中可能还需要深入理解具体的业务需求和技术细节才能充分发挥 RocksDB 的潜力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值