​MySQL存储引擎

MySQL基于存储引擎的一个解决方案

blob.png

官方的存储引擎

不支持事物:MyISAM, Memory, Archive(只写,不允许修改删除,日志审计) 

锁的粒度:Innodb,NDB 行级锁

是否支持压缩

innodb 5.1.37引入innodb plugin 这个开支持压缩

myisam 5.6开始支持英语全文搜索

Innodb 5.6 开始支持英语全文搜索

批量写的速度

MyISAM,Memory的批量写入比较快

Innodb的Bulk insert (load data) 在5.7之前没有MyISAM,Memory快

原因是因为不支持批量更新索引

5.7之后改善

恢复到某个点 binlog

TokuDB

带压缩支持高速写入的一个引擎

Innodb/Tokudb压缩比是10:1

innodb表每秒2万

Tokudb可以达到4W

tokudb的insert特别快

percona enterpise

Percona MySQL 5.6 包含了TokuDB

MariaDB 中也含的有Tokudb

engine=Tokudb;

Percona Server TokuDB做为他的一个默认引擎

缺点

Tokudb不适合update多的场景

tokudb表20G

update col2=xxx ;

表由原来的20G表变成40G了

多引擎混用注意join

会形成大量移植表不推荐2种不同引擎join

MySQL不适合做OLAP?

Infrobright/InfiniDB

MySQL 5.1的时间都出现了

group ,order ,count之类聚集函数

OLAP 里的表,很多都是宽表

统计类的库(OLAP)一张表好几百列

针对业务去选择引擎

常用推荐:InnoDB

如果有大数据写入批量读取的操作Tokudb

针对OLAD可以考虑使用InfiniDB/Infrobright

推荐研究: InfiniDB,完全开源

infrobright 分企业版和社区版,社区版只支持load data操作

如果对数据量小,要求速度,无持久化要求:Memory

拒绝选用MyISAM

  1. 只能用单个cpu

  2. 内存只能用到4G

  3. 内存里只有索引(B-tree)

  4. 并发能力差

blob.png