1、介绍
MyRocks 是Facebook公司推出的一个高压缩,高性能写入的MySQL分支。
项目地址: https://github.com/facebook/mysql-5.6
基于RocksDB开发 MyRocks = MySQL + Rocks引擎
支持zst压缩算法
Xenon TokuDB是对Percona公司的TokuDB进行Patch优化。
项目地址: https://github.com/XeLabs/tokudb
引入的优化点:
支持xtrabackup直接备份 https://github.com/XeLabs/tokudb-xtrabackup 打过针对TokuDB备份的Patch的分支。
加入ZST压缩算法(From MyRocksDB)
支持binlog group commit
引入性能计数器 show engine tokudb status ,更多选项。
2、测试方法说明
基本环境
基于某云环境: 高性能主机,
操作系统 ubuntu 16 core 16G内存, 1T 高速盘。
MySQL版本
MyRocks : 版本库最新版本 MySQL-5.6.30
xenon-tokudb :基于Percona-server-5.7.17 增加优化参考介绍中。
MyRocks配置
rocksdb
default-storage-engine=rocksdb
skip-innodb
default-tmp-storage-engine=MyISAM
binlog_format=ROW
collation-server=utf8_bin
transaction-isolation=READ-COMMITTED
rocksdb_max_open_files=-1
rocksdb_base_background_compactions=1
rocksdb_max_background_compactions=8
rocksdb_max_total_wal_size=1G
rocksdb_max_background_flushes=4
rocksdb_block_size=16384
rocksdb_block_cache_size=8G
rocksdb_table_cache_numshardbits=6
# rate limiter
rocksdb_bytes_per_sync=4194304
rocksdb_wal_bytes_per_sync=4194304
rocksdb_rate_limiter_bytes_per_sec=104857600 #100MB/s
# triggering compaction if there are many sequential deletes
rocksdb_compaction_sequential_deletes_count_sd=1
rocksdb_compaction_sequential_deletes=199999
rocksdb_compaction_sequential_deletes_window=200000
rocksdb_default_cf_options=write_buffer_size=128m;target_file_size_base=32m;max_bytes_for_level_base=512m;level0_file_num_compaction_trigger=4;level0_slowdown_writes_trigger=10;level0_stop_writes_trigger=15;max_write_buffer_number=4;compression_per_level=kNoCompression:kNoCompression:kNoCompression;bottommost_compression=kZlibCompression;compression_opts=-14:1:0;block_based_table_factory={cache_index_and_filter_blocks=1;filter_policy=bloomfilter:10:false;whole_key_filtering=1};level_compaction_dynamic_level_bytes=true;optimize_filters_for_hits=true
rocksdb_override_cf_options=cf_link_pk={prefix_extractor=capped:20};rev:cf_link_id1_type={prefix_extractor=capped:20}
tokudb配置参数
loose_tokudb_cache_size=8G
loose_tokudb_directio=ON
loose_tokudb_fsync_log_period=1000
tokudb_commit_sync=0
测试方法:
insert 2千万记录测试(使用iibench.py)
python ./iibench.py --db_host=192.168.0.2 --db_port=3306 --db_user=wubx --db_password=wubxwubx --db_name=wubx --engine=TokuDB --table_name=wubx --max_rows=20000000 --rows_per_report=100000 --secondary_indexes=1 --insert_only --setup
(对这个脚本感兴趣的可以加作者QQ/WeiXin: 82565387 更多测试也可以一块交流。)
(一个测试下来,距离企望差别太远,就没在继续了,希望有了解的朋友联系我,给指出来可以提善的地方)
3、测试结果对比
在tokudb_cache_size = 8G 下 insert 2千万记录
MyRocks的大小统计,我是统计了$datadir/.rocksdb下的sst文件,因为就创建了一张表,所以就统计一下这里的SST文件大(正确度待定)
按insert 10万记一次写入速度,大概情况参考:

4、总结
本次测试MyRocks并没有让人眼前一亮,反而带来的很多失望。 性能是一方面,有可能是现在对MyRocks不了解,没办法做更多的优化。主要失望是:官方在文档方面真的太弱了,努力空间无限。
另外对MyRocks的文件管理方面也是看着有种太Low的感觉一推的SST文件,难以区别属于那个表。目前来看MyRocks到真正的成熟,路线还比较久远。
从性能测试上来看Xenon-TokuDB比MyRocks差不多高出来40%以上。
但对MyRocks有一点值的表杨的就是性能吞吐非常的稳定。没有大波动,数据文件更小一点,优势不明显。期待MyRocks发展的更快。
BTW: 如果想进行MyRocks测试的同学,请下载版本库里的文件,不要下载他们放出来的Release包(Too old)
5、参考
关于MyRocks可以参考: http://mysql.taobao.org/monthly/2016/08/03/ 这篇文章里面有一些Facebook测试的数据。在云的环境,看不到这个趋势,有物理机环境的朋友,也可以测试一下。
6、感谢
感谢某云(创业公司)提供的高性能主机,感觉真的不错。 磁盘IO轻松200M左右的写入。过段也可以来一个基于云主机的性能测试:)。




