下面我们从性能、安全和功能等方面对MariaDB和MySQL这两个数据库进行对比,并列举出在选择数据库时需要慎重考虑的事项。
1 存储引擎
除了包含标准的InnoDB、MyISAM、BLACKHOLE、CSV、MEMORY、ARCHIVE和MERGE存储引擎之外,MariaDB 10.5还额外提供了以下存储引擎。
□ColumnStore:大规模并行分布式计算MPP数据架构,专为大数据扩展而设计,用于分析PB级的数据。
□MyRocks:具有出色压缩性能的存储引擎(由于TokuDB已经被Percona废弃,因此推荐使用MyRocks)。
□Aria:在处理内部的临时表时,用Aria引擎代替MyISAM引擎,可以使某些GROUP BY和DISTINCT请求的速度更快,因为相较于MyISAM, Aria的缓存机制更好。
□Spider:水平分片存储引擎(TSpider是基于MariaDB 10.3.7上的开源存储引擎Spider定制研发的,它是腾讯游戏场景中规模最大的分布式MySQL存储引擎)。
2 扩展和新功能
MariaDB对服务层做了大量改进,增加了很多新的特性,如果一个补丁或功能是有用的、安全的、稳定的,那么MariaDB官方就会尽一切努力在MariaDB发行版中加入它。
MariaDB最显著的功能列举如下(MySQL里没有这些功能)。
□集成了Galera Cluster高可用集群插件,能够保证数据不丢失。
□系统版本表能有效防止因误删除或误更改而导致的数据丢失,它里面存储了所有更改的历史数据,而不仅仅是当前时刻的有效数据。例如,同一行数据一秒内被更改了10次,那么系统版本表中就会保存10份不同时间的版本数据。
□mysqlbinlog增加了闪回功能(仅支持在DML语句INSERT、DELETE、UPDATE上闪回)。
□“SQL_MODE=ORACLE”支持Oracle的PL/SQL。
□隐藏列将不会出现在“SELECT*”语句的结果中。
□动态列支持以JSON格式存储数据(注意,这里动态列的实现方式与MySQL 5.7的不一样)。
□半同步复制插件内置在MariaDB服务器中,并且不再以插件的方式提供。这就意味着不用再通过“INSTALL SONAME 'semisync_master'”和“INSTALL SONAME 'semisync_slave'”的方式来安装插件了。
□支持EXCEPT、INTERSECT语法。
□对CREATE OR REPLACE TABLE和CREATE OR REPLACE DATABASE语法进行了扩展。
□DELETE语句支持数据回滚功能,可以将单个表中已删除行的结果集返回给客户端。
□INFORMATION_SCHEMA.PROCESSLIST表中添加了一个额外的列TIME_MS,用于查看毫秒时间。
□支持虚拟列(函数索引)。
□对kill命令进行了扩展,可以指定杀死某个user用户的所有查询(例如“kill user hechunyang”)。
□支持基于表的组提交并行复制(注意,这里的实现方式与MySQL 5.7的不一样)。
□二进制日志支持压缩功能,可以通过设置log_bin_compress参数启用事件的DML/DDL语句压缩。
□修改表结构时可以显示执行进度。
□慢查询日志里增加了执行计划。