TokuDB的特点验证 - billy鹏
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鹏的更多相关文章
- TokuDB的特点验证
随着数据量越来越大,越来越频繁的遇到需要进行结构拆分的情况,每一次拆分都耗时很久,并且需要多方配合,非常的不想搞这个事情.于是在@zolker的提醒下想到了13年开源tokuDB,来解决我们迫在眉睫的 ...
- innobackupex的流备份【转】
并行备份 innobackupex -p123123 --parallel= /backup 节流备份(节省IO) innobackupex -p123123 --throttle= /backup ...
- Percona TokuDB
Percona TokuDB Percona TokuDB 1. TokuDB说明 2. TokuDB安装 3. 使用TokuDB 3.1 快速插入和富索引 3.2 聚集sec ...
- mysql不同版本和存储引擎选型的验证
Mysql的版本和存储引擎较多,为了选择最适合业务使用的系统,需要进行一定的验证,本文描述mysql的验证过程和思路. 主要涉及: Mysql的版本 v Mariadb v Tokudb v Orac ...
- AngularJS中的身份验证
欢迎大家指导与讨论 : ) 一. 身份验证的意义 首先呢,网络应用的身份验证的意图在于:保护网站中的重要资源.基于某些原因这些资源并不能公开,比如付费资源(交过钱的用户才能上的网络课程),或者一 ...
- 20135335郝爽 & 20135304刘世鹏 实验一
北京电子科技学院(BESTI) 实 验 报 告 课程: 密码系统设计基础 ...
- mysql/tokudb安装
一.环境要求: Operating Systems:64-bit Linux Memory: >=1G 二.安装步骤 1.下载安装包mysql-5.5.41-tokudb-7.5. ...
- XtraBackup应用说明(支持TokuDB)
背景: 关于物理备份工具xtrabackup的一些说明可以先看之前写过的文章说明:XtraBackup 安装使用和xtrabackup 使用说明(续),本篇文章将介绍xtrabackup在使用中的注意 ...
- WebApi中关于base64和jwt的联合验证
用到了如鹏的代码 jwt验证 public class MyAuthoFilterPostOrgInfoAttribute: AuthorizationFilterAttribute { public ...
随机推荐
- 第二十九课:javascript异步处理
大家知道javascript中有多少方法能够实现异步处理吗?setTimeout(),setInterval()是最常用的两个.XMLHttpRequest对象,进行ajax请求时.postMessa ...
- tableviewCell的xib中collectionView签协议
- 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0 +VS 2013 开发环境配置
图片太多,具体过程参照: [OpenCV入门教程之一] 安装OpenCV:OpenCV 3.0.OpenCV 2.4.8.OpenCV 2.4.9 +VS 开发环境配置 说下我这边的设置: 选择deb ...
- hibernate事务
hibernate事务 9.3 Hibernate的事务管理 事务(Transaction)是工作中的基本逻辑单位,可以用于确保数据库能够被正确修改,避免数据只修改了一部分而导致数据不完整,或者在修改 ...
- web.xml中配置固定数据
在web.xml单个servlet中配置的数据的存取 存: <servlet> <description>This is the description of my J2EE ...
- ASP.NET Web API实现POST报文的构造与推送
毕设和OAuth协议相关,而要理解OAuth协议就必须理解HTTP GET/POST方法.因此研究了一下如何使用Web API或MVC构造POST报文并实现客户端与服务器端的交互. 我使用的工具是Vi ...
- Java-HashMap和HashTable的区别
类继承and实现上看 public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable ...
- sort+awk+uniq三者结合使用
(1)统计文件中出现次数最多的前10个单词 #ps -ef > ps.file #cat ps.file | awk ‘{print $1}’ | sort | uniq -c | sort - ...
- 洛谷P2731骑马修栅栏
题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏.你必须编一个 ...
- MVC简介
全名是Model View Controller,模型-视图-控制器,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互 ...