1.1 Percona Or MariaDB

2019-03-31 22:34:38 17,440 2

1 简介

本文将对MySQL官方版本以及最流行的两个分支:MariaDB 和 Percona Server进行对比介绍。笔者曾经遇到过一些同学,在可能在一个公司待了可能几年了,问他公司用的数据库是什么,他只能回答出,使用的是Mysql。当问到只是用的官方版本,或是哪一个分支时,他就一无所知了。本文将介绍这些分支产生的原因,以及在实际生产中,应该如何进行选择。

WX20190331-213525@2x.png

我们从DB-Engines数据库排名开始说起。毫无疑问,MySQL 是最受欢迎的开源数据库之一,成千上万的网站依赖于 MySQL。截止笔者发此文时( 2019年3月31日),DB-Engines上最新的的数据库前20排名如下所示:

image.png

  

可以看到,官方Mysql的排名高居第2,MariaDB的排名是第10,Percona Server甚至没有出现在截图中(排名90)。从这个角度来说,无疑,对于大部分用户来说,官方Mysql应该都是一个很好的解决方案。

但是,大部分不代表所有。还是有一些公司需要有更合适自己的解决方案。在这个背景下,一些Mysql分支就出现了。原因如下:

一些分支认为 MySQL 变得太臃肿 了:认为Myswql提供了许多用户永远不会感兴趣的功能,牺牲了性能的简单性。如果人们对更精简的 MySQL 4 特别满意,那么为什么还要在 MySQL 5 中添加额外的复杂性呢?对于此分支来说,更好的 MySQL 分支应该更简单、更快捷,因此提供的功能也较少,但这样会使这些功能极其迅速地发挥作用,并且牢记目标受众。

此外,一些分支的最高目标是成为 MySQL 的替代产品:例如,Percona,MariaDB。它们认为MySQL 并没有提供足够多的新功能、添加新功能的速度太慢了或是认为 MySQL 没有跟上高可用性网站的目标市场的发展形势,这些网站运行于具有大量内存的多核处理器之上。因此目标是成为Mysql的替代产品, 因此这些分支通常都使用与 MySQL 相同的代码和界面,使过渡变得非常容易。

2 Percona

       Percona是原MySQL运维部总监Peter和Vadim在2006年离开后创建的,因其本身是运维出身,所以他做的这个分支基本上也是为运维人员服务的。一些DB常用的工具XtraBackupPercona Toolkit,都是出自此公司。

        当然,Percona公司最主要的产品还是Mysql分支产品:Percona Server。Percona Server 声称可以"完全与 MySQL 兼容",这是与其他更改了大量基本核心 MySQL 代码的分支的最大区别。因此从理论上讲,从Mysql迁移到Percona Server,无需更改程序中的任何代码。

Percona公司在MySQL数据库优化方面做了非常多的工作,例如,Percona Server在官方InnoDB存储引擎的基础上开发了XtraDB存储引擎,可以认为XtraDB是InnoDB存储引擎的增强版。与MySQL5.1内置的InnoDB相比,单位时间执行事务数量是后者的2.7倍。XtraDB引擎能做到的向下兼容,创建数据表的时候,InnoDB引擎会自动被替换成XtraDB引擎,用户和客户端根本感觉不到区别。(注意这里只是说Mysql 5.1的情况,现在Mysql已经发展到8.0了,情况已经不同)。

完全兼容Mysql意味着,Percona Server需要跟着Mysql 官方版本一起演进。Percona Server采取的策略是:先兼容MySQL然后再进行优化,所以用户可以很容易的从MySQL迁移到Percona Server上面,而不用去考虑兼容性的问题。Percona Server会在每个官方版本的基础上,添加一些新的功能特性。下图列出了 在mysql 5.7 版本上官方版本与Percona Server的功能特性对比(点击这里,查看完整信息): 

6BDBD875-0D81-4B51-AAF1-2D784C98289D.png

   

    需要注意的是,Percona Server 虽然是开源的,但是他们自己管理代码,不接受外部开发人员的贡献,以这种方式确保他们对产品中所包含功能的控制。

3 MariaDB

MariaDB 的主要创建者是 Monty Widenius,也是 MySQL 的初始创建者。2008年Sun以10亿美金收购MySQL,结果Sun又把Microsystems和MySQL转手卖给Oracle,Monty愤而出走,创立MariaDB分支。从某种程度来说,可能MariaDB才是一脉相承过来的MySQL。(出走也许是因为担心 Oracle 是否会投入精力,来保持Mysql在数据库领域的领先地位)

与Percona Server不同,MariaDB是一个"开放"的分支,Monty为了避免它闭源特别成立了一个基金会( https://mariadb.org/),把MariaDB放在基金会里,基金会无法进行商业活动,也就不会步MySQL的后尘。当然,也有一个对应的MariaDB公司(https://mariadb.com/),提供内部QA稳定性测试、商业套件、订阅服务、培训、甚至定制化开发服务等,所以即使MariaDB这个公司被收购了,也不会影响到MariaDB本身的发展。

MariaDB基金会分为白金、金牌和铜牌三个级别的赞助会员,普遍来自于MariaDB项目的贡献者或用户。值得一提的是,在2017年的3月与6月,阿里云和腾讯云先后成为MariaDB的白金赞助商。下图列出了部分赞助商 

4A17ACBD-D574-42F6-B39B-CE0E59EDDE7C.png

在早期,MariaDB 还声称自己是 MySQL 的替代,从 MySQL 切换到 MariaDB 时,无需更改任何基本代码。然而众多因素,导致MariaDB这个分支上也比官方MySQL走得更快一些,对内核进行了大量的修改。这里有众多因素:

  • MariaDB 自身"开放”的定位

  • 基金会的赞助商的推动。

虽说基金会不能进行商业活动,但是如阿里云/腾讯云,本身也是公有云的提供商,面对大量的中小企业客户需求,他们在数据库层面所有的功能改进或者bugfix,贡献给基金会的时候,更容易被采纳(笔者自己YY)。 

这意味着,实际上Maridb高版本已经不是100%兼容Mysql官方版本了。

另外值得一提是,MariaDB 早期版本也使用了来自 Percona 的 XtraDB 引擎。但是从MariaDB 10.2版本之后,又换回了Mysql官方的InnoDB。主要是原因,MariaDB认为在Mysql 5.5之前,XtraDB相对于InnoDB还有一些很大的优势,但是在Mysql 5.5之后,InnoDB已经做了很大的改进,二者已经没有那么大的性能差异;另外,维护XtrabDB意味着时刻需要跟随者官方版本的演进,给开发带来了很大的麻烦。点击这里参考原文。


4 如何选择?

毫无疑问,官方MySQL 是一款非常出色的产品,是一个非常适合大多数使用情况的数据库。从前文的DB-Engines排名,可以看到官方的Mysql高居第2,MariaDB排名在15,Percona Server甚至没有出现在截图上(排名90)。从这个角度来看的话:

  • 官方Mysql依然是绝大部分用户的选择。

  • MariaDB排名如此之高,原因有很多:自身的功能特性,同时是Red Hat、SUSE等提供的LAMP架构安装包的默认数据库,还有一些赞助商是公有云厂商。

  • Percona Server虽然排名是最靠后的,也许是大多数DBA最喜爱的,国内很多大型互联网公司都使用Percona Server。原因在于:MariaDB新特性很多,有很多新功能,其实有些我们不需要,还容易出bug。Percona Server分支更稳定,对DBA运维更加友好。那为什么Percona Server排名这么低呢?这可能与Percona Server的定位有关,其只支持Linux操作系统,作为生产数据库使用。而官方Mysql、MariaDB都支持多种操作系统,例如Windows、OS X、Solaris等,无疑扩大了受众。另外,对于官方Mysql、MariaDB都有公有云厂商将其以DBaaS的方式提供服务,但是,没有公有云厂商使用Percona Server。

      对于一些没有数据库内核研发能力团队,还是建议使用Percona

      最后,附上Mysql、MariaDB、Percona Server的功能特性对比。