TokuDB的特点验证 - billy鹏

随着数据量越来越大,越来越频繁的遇到需要进行结构拆分的情况,每一次拆分都耗时很久,并且需要多方配合,非常的不想搞这个事情。于是在@zolker的提醒下想到了13年开源tokuDB,来解决我们迫在眉睫的容量问题。

坊间流传tokuDB有如下几个看着令人垂涎欲滴的特点,正好符合我们实际环境的需求,故针对每个特点进行了针对性测试:

1、高压缩比,官方宣称可以达到1:12。

2、高insert性能,官方称至少比innodb高9倍。

3、可以在线添加索引和字段,速度快。


(前提:由于是为了解决线上的实际问题,故本次验证并不会按照严格的测试规范进行,所得数据也不是tokuDB的极限数据,只是在实际业务上的表现)

高压缩比:

原有数据库容量1126G,使用tokudb之后,压缩到76G,压缩比达到惊人的 14倍 

高insert性能:

简单比较追同步的性能,同时在innodb和tokudb上阻塞同步3分钟,然后观察追同步的性能(不代表最大性能,因为会受限于mysql单线程追同步的瓶颈。io不会被充分利用到)

基本环境为SAS服务器,12*300G 15000转SAS盘,BP size相同。

可以明显看到在不改变基本配置,不增加多线程复制的情况下,tokudb的追同步性能高于innodb,大概在 1.9倍 

在线添加字段和索引:

测试目标表为425MB,所在服务器均为10块盘做RAID5的SSD服务器。

从下图可以看出

  • 添加索引,innodb快,tokudb慢
  • 删除索引,innodb快,tokudb超快
  • 增加字段,innodb慢,tokudb超快
  • 删除字段,innodb慢,tokudb超快

TokuDB在在线DDL操作的时候相对InnoDB有较大的优势。在索引方面,删除索引基本瞬间完成。在字段方案,添加/删除字段基本都是瞬间完成。

具体我们可以看下面的操作记录。

CREATE TABLE `timeline_1009` (
`uid` bigint(16) unsigned NOT NULL,
`vflag` tinyint(4) unsigned NOT NULL DEFAULT '0',
`status_id` bigint(16) unsigned NOT NULL,
`source` int(6) unsigned NOT NULL DEFAULT '0',
`fflag` int(6) unsigned NOT NULL DEFAULT '0',
`mflag` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`uid`)
) ENGINE=TokuDB DEFAULT CHARSET=utf8 ROW_FORMAT=TOKUDB_LZMA;

InnoDB操作记录:

>create index idx_flag on timeline_1009 (mflag);
Query OK, 0 rows affected (36.48 sec) >drop index idx_flag on timeline_1009;
Query OK, 0 rows affected (0.29 sec) >alter table timeline_1009 add column test_flag tinyint;
Query OK, 4549087 rows affected (28.64 sec) >alter table timeline_1009 drop column test_flag;
Query OK, 4549087 rows affected (27.29 sec)

TokuDB操作记录:

>create index idx_flag on timeline_1009(mflag);
Query OK, 0 rows affected (56.56 sec) >drop index idx_flag on timeline_1009;
Query OK, 0 rows affected (0.05 sec) >alter table timeline_1009 add column test_flag tinyint;
Query OK, 0 rows affected (0.01 sec) >alter table timeline_1009 drop column test_flag;
Query OK, 0 rows affected (0.00 sec)

innodb添加字段的时候会建立一个temp table,修改表结构后,会删除原表,并将临时表rename回原名字,所以就相当于对表进行了一次optimization,清理各种碎片,这也就是为什么add column的时候会有百万级别的rows affected。但是可以很明显的看到tokudb的rows affected为0,推测是tokudb在添加字段的时候,并不会采用innodb的方法。从官网的文档中获得的信息是,TokuDB会将添加字段的工作放在后台执行,而其快速的原因是将B-tree改为了Fractal-tree,其将随机IO替换为了顺序IO。领用Fractal-tree的特性,将HCAD命令广播到所有行上,而不是想InnoDB那样,需要open table并消耗很多的内存资源。


以上都是TokuDB的特点,接下来我们看看其对CPU、IOPS和RT的影响。以上3点是影响服务器负载和对外提供服务质量的关键数据。

测试背景,相同的slave,只不过引擎不通,在同一个时间点抓取数据,理论上认为承担的服务量相等。

CPU消耗:

理论上经过大压缩比的数据库一定会比较消耗cpu的usr态,果然从下图中我们可以看出,tokudb比innodb对usr态的cpu消耗要多,平均在 2倍 左右。

IOPS消耗:

根据官方文档的说明,相同QPS的情况下,tokudb应该比innodb消耗更少的iops。我们从下面两个图可以看出,读的IOPS并没有太大的差别,但是写的IOPS innodb比tokudb平均多消耗了 5.5倍 

RT响应时间:

在响应时间上,由于整体数据库的size变小了,测试目标库innodb版本743G,tokudb版本61G。相对于BP=30G来说,明显tokudb更占优势。但是由于tokkudb的数据是经过高压缩的,在响应时间上应该还会多一部分解压的时间消耗,所以最终结果不好确认。

从测试结果看,tokudb的响应时间明显高于innodb的,其平均值大概高 2.2倍 。看来如果上了tokudb,响应时间是需要付出的代价。


总结: 

TokuDB的优点:1、高压缩比 2、高insert性能 3、增删字段秒级。

TokuDB的缺点:1、cpu usr态消耗高 2、响应时间变长。

总体来说,TokuDB的特性非常的吸引人,能解决我们很棘手的问题。但是,看上去很美的东西,一定会有坑存在,排雷将是我们下一步的重点工作,这也是决定TokuDB到底能不能真正在线上使用的关键。

TokuDB的特点验证 - billy鹏的更多相关文章

  1. TokuDB的特点验证

    随着数据量越来越大,越来越频繁的遇到需要进行结构拆分的情况,每一次拆分都耗时很久,并且需要多方配合,非常的不想搞这个事情.于是在@zolker的提醒下想到了13年开源tokuDB,来解决我们迫在眉睫的 ...

  2. innobackupex的流备份【转】

    并行备份 innobackupex -p123123 --parallel= /backup 节流备份(节省IO) innobackupex -p123123 --throttle= /backup ...

  3. Percona TokuDB

    Percona TokuDB Percona TokuDB 1.     TokuDB说明 2.     TokuDB安装 3.     使用TokuDB 3.1 快速插入和富索引 3.2 聚集sec ...

  4. mysql不同版本和存储引擎选型的验证

    Mysql的版本和存储引擎较多,为了选择最适合业务使用的系统,需要进行一定的验证,本文描述mysql的验证过程和思路. 主要涉及: Mysql的版本 v Mariadb v Tokudb v Orac ...

  5. AngularJS中的身份验证

    欢迎大家指导与讨论 : )  一.  身份验证的意义  首先呢,网络应用的身份验证的意图在于:保护网站中的重要资源.基于某些原因这些资源并不能公开,比如付费资源(交过钱的用户才能上的网络课程),或者一 ...

  6. 20135335郝爽 & 20135304刘世鹏 实验一

    北京电子科技学院(BESTI) 实     验    报     告 课程: 密码系统设计基础                                                      ...

  7. mysql/tokudb安装

    一.环境要求:    Operating Systems:64-bit Linux     Memory: >=1G 二.安装步骤 1.下载安装包mysql-5.5.41-tokudb-7.5. ...

  8. XtraBackup应用说明(支持TokuDB)

    背景: 关于物理备份工具xtrabackup的一些说明可以先看之前写过的文章说明:XtraBackup 安装使用和xtrabackup 使用说明(续),本篇文章将介绍xtrabackup在使用中的注意 ...

  9. WebApi中关于base64和jwt的联合验证

    用到了如鹏的代码 jwt验证 public class MyAuthoFilterPostOrgInfoAttribute: AuthorizationFilterAttribute { public ...

随机推荐

  1. angular的工具方法笔记(equals, HashKey)

    分别是angular脏值检测的工具方法equals和 类HashKey的使用方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transi ...

  2. solr导入mysql数据库

    感谢ITeye的博主viskyzz分享的经验,笔者基本参考ta的方法.然而,解决中间出现的问题时也融入了自己的经验. 查看ta的原文请戳: http://tbwuming.iteye.com/blog ...

  3. G-nav-02

    /*header: Navigation public style*/header:before, header:after ,.navigation:before, .navigation:afte ...

  4. Svn-如何清除eclipse中保存的svn用户名和密码

    1. 查看你的Eclipse中使用的是什么SVN Interface windows > prefeSence > Team > SVN #SVN Interface 2. 如果是用 ...

  5. 阿里云搭建基于PPTP的VPN(Windows Server 2008)

    由于阿里云在网络上分为两张网卡,一张内网,另一张是外网,所以在搭建PPTP的VPN时需要特殊处理. 实现步骤: 通过以上配置即可拨号成功 下面是通过NFS策略进行控制访问  完成后,即可拨号上网. 下 ...

  6. SqlServer建表规范

    一.数据库在建表时,一般默认字段如下,也算是标准字段吧 删除标志:DeletionStateCode 创建时间:CreateOn 创建人:CreateBy 更新时间:ModifiedOn 更新人:Mo ...

  7. SQL多条件查询

    SELECT a.tel,a.business_code,b.name AS business_name,a.register_time FROM T_RED_USER a LEFT JOIN T_P ...

  8. jsp学习(二)

    jsp运行原理 当服务器上的一个jsp页面被第一次请求标记时,服务器上的jsp引擎首先将jsp页面文件转译成一个Java文件,并编译这个java文件生成字节码文件,然后执行字节码文件响应客户的请求. ...

  9. java连接mysql(一)

    import java.sql.*; public class MysqlTest { public static void main(String[] args) throws SQLExcepti ...

  10. Using a Comparison Function for the Key Type

    (这是C++系列随笔的第二篇,这一系列是我练习C++而查的资料) C++ Primer 5th. Ed. pp. 425 ---------------------- Using a Comparis ...