把rocksdb配置成leveldb
阅读原文时间:2022年01月06日阅读:1

将rocksdb配置成leveldb

1.配置方法

配置方式有三种:

第一种适合进行性能测试对比:是以参数形式在运行db_bench或ycsb-c的时候以参数形式将rocksdb将其配置成leveldb。

第二种属于一劳永逸模式,但改回来麻烦:是改动rocksdb的options.h文件的默认参数,以后直接运行就行。这种方式在改之前记得做好备份。

第三种适用于自己写的程序:在函数中新建Options对象,然后使用rocksdb本身提供的函数或直接对属性进行设置,例如:

Options options;

// 该函数会将level0_file_num_compaction_trigger(触发level0的compaction的SSTable数量)设为2等等,是rocksdb官方给出的优化,但显然和配置成leveldb没什么关系。

options.OptimizeLevelStyleCompaction();

//将write_buffer_size设置成4MB。

options.write_buffer_size = 4 << 20;

2.参数

相比于leveldb,rocksdb可配置的参数实在是太多了,所以很难保证下面的参数能够覆盖所有不同点。

-bloom_bits,每个key对应的bloom过滤器位数 ,leveldb使用默认的位数,rocksdb若使用默认的该值可以设为-1或默认不动,若不起用bloom过滤器请设置为0。

-block_size,该参数不论rocksdb还是leveldb都默认为4096.

-compression_type,leveldb只使用snappy压缩,rocksdb除snappy外还有zlib、bzip2等,并且其各层之间的压缩方法并一定一致。建议直接设为snappy或者不使用压缩。

-write_buffer_size,leveldb默认4M,rocksdb默认64M。

-key_size, -value_size,leveldb默认key_size为16,value_size为100B,这边直接设置rocksdb参数即可。

-threads,rocksdb虽然是以leveldb向多线程改进,但db_bench默认还是单线程执行,可以将threads设为1或者默认不动。

-open_files,该参数leveldb默认是1000, rocksdb默认是无限制的。

-max_write_buffer_number,rocksdb默认双memtable,这里限制为1。

-max_bytes_for_level_base,leveldb的level1默认100M,rocksdb默认268435456,也就是256M

-cache_size,leveldb和rocskdb默认都是8M

-max_bytes_for_level_base,rocksdb的第0层上限是256M,显然leveldb不是

-leveldb的触发level0层的compaction的文件数量,触发减缓写入文件数量,level0的文件最大数量分别是4,8,12;而rocksdb分别是4,20,24.

3.db_bench

rocksdb在进行本身的db_bench测试的时候可以进行如下配置可以基本化身leveldb,当然其内部还有很多不同的地方,越新的版本越多:

./db_bench -key_size=16 -value_size=100 -num=kv的数量 -threads=1 -write_buffer_size=4194304 -open_files=1000 -benchmarks=写入方式,默认顺序写 -max_write_buffer_number=1 -compression_type=kNoCompression -bloom_bits=0 -cache_size=8388608 -level0_file_num_compaction_trigger=4 -level0_slowdown_writes_trigger=8 -level0_stop_writes_trigger=12 -max_bytes_for_level_base=104857600

或者直接改动rocksdb的options.h文件即可,但记得备份。

另:鬼知道rocksdb怎么这么多参数的,以上不能完全保证。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章