1.3 MariaDB 10.0新增的功能
通过下面官网的对比图(见图1-2~图1-5),可以清晰地看到MariaDB 10新增加的功能。
图1-2 可伸缩性和可扩展性的对比
图1-3 性能对比
图1-4 NoSQL支持对比
图1-5 操作和安全上的对比
从图1-2~图1-5可以看到,在功能上,MariaDB 10.0已经完胜MySQ L5.6, MySQ L5.7才慢慢将缺失的功能追补上来,并且线程池、审计日志等功能是出现在MySQL企业版里的,需要付费。
1.3.1 更多的存储引擎
除了包含标准的MyISAM、BLACKHOLE、CSV、MEMORY、ARCHIVE和MERGE等存储引擎外,MariaDB的源代码包和二进制包还包含以下额外的存储引擎。
❑ Aria(增强版的MyISAM)
❑ XtraDB(增强版的InnoDB)
❑ FederatedX
❑ OQGRAPH
❑ SphinxSE
❑ IBMDB2I
❑ TokuDB
❑ Cassandra
❑ CONNECT
❑ SEQUENCE
❑ Spider
❑ PBXT
1.3.2 速度的提升
在MariaDB 5.3版本里,就已经对子查询进行了优化,并采用semi join半连接方式将SQL改写为表关联join,从而提高了查询速度。
在MariaDB 5.3版本里引入group commit for the binary log组提交技术,简单来说,将多个并发提交的事务加入一个队列里,再将这个队列里的事务利用一次I/O合并提交,从而解决写日志时频繁刷磁盘的问题。
在MariaDB 10.0版本里引入基于表的多线程并行复制技术,如果主库上1秒内有10个事务,那么合并一个I/O提交一次,并在binlog里增加一个cid = XX标记,当cid的值一样时,Slave就可以进行并行复制,通过设置多个sql_thread线程实现。在MySQL 5.5版本里是单进程串行复制,通过sql_thread线程来恢复主库推送过来的binlog,这样会产生一个问题,主库上有大量的写操作,从库就有可能会出现延迟。MySQL 5.6是基于库级别的并行复制,MySQL 5.7是基于表级别的并行复制。
在MariaDB 5.5版本里引入线程池thread pool技术,线程池的连接复用减少了建立连接的开销,减少了CPU上下文切换,非常适合高并发php短连接应用场景(如使用开源电商平台ECSHOP秒杀业务场景)。
处理内部的临时表时,MariaDB用Aria引擎代替了MyISAM引擎,这会使某些GROUP BY和DISTINCT请求速度更快,因为Aria有比MyISAM更好的缓存机制。
1.3.3 扩展和新功能
MariaDB对服务层做了大量改善,增加了很多新的特性,如果一个补丁或功能是有用的、安全的、稳定的,那么MariaDB官方会尽一切努力在MariaDB发行版包括它。MariaDB 5.3版本里最显著的特点如下。
1.时间精确到微秒级别
一个额外的列TIME_MS已被添加到INFORMATION_SCHEMA.PROCESSLIST表里,用于查看微秒时间,如图1-6所示。
图1-6 显示微秒时间
2.提供了虚拟列(函数索引)
在MariaDB 5.2版本里就已经提供了虚拟列(函数索引),但直到MySQL 5.7版本才支持。
3.kill命令扩展
在MariaDB 5.3版本里又对kill命令进行了扩展,可以指定某个user用户,杀死所有查询(见图1-7)。
图1-7 杀死root账号连接
4.修改表结构可显示执行进度
通过alter table命令可以显示执行进度,如图1-8所示。
图1-8 修改表结构显示执行进度
5.提供了动态列(可以存储JSON格式)
在MariaDB 5.3版本里就已经提供了动态列(可以存储JSON格式),但直到MySQL 5.7版本才支持。
在MariaDB 10.0版本里则有以下显著特点。
❑ 提供多源复制,但直到MySQL 5.7版本才支持。
❑ 支持GTID同步复制。
❑ 创建用户支持创建角色(role)权限。
❑ 通过show processlist可以查看内存占用,如图1-9所示。
图1-9 显示内存使用
❑ 执行create or replace table ,等于先执行drop操作,再执行create操作,如图1-10所示。
图1-10 create语法扩展
❑ 执行delete from table returning命令,在删除前,可以返回要删除的记录,以便万一失手,可以拿到原始数据,如图1-11所示。
图1-11 delete语法扩展
❑ 慢查询日志(slow log)里增加了explain执行计划。
在my.cnf里添加以下代码:
log-slow-verbosity=query plan, explain
会在慢日志里把执行计划也打印出来,以方便排查问题,如图1-12所示。
图1-12 慢日志