专栏首页田守枝的技术博客Mysql分支选择:Percona Or MariaDB

Mysql分支选择:Percona Or MariaDB

1 简介

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

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

可以看到,官方Mysql的排名高居第2,MariaDB的排名是第15,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常用的工具XtraBackup和Percona 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会在每个官方版本的基础上,添加一些新的功能特性。https://www.percona.com/software/mysql-database/percona-server/feature-comparison列出了不同版本之间的差异。下图列出了mysql 5.7 版本上官方版本与Percona Server 5.7 的部分特性对比:

需要注意的是,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的白金赞助商。下图列出了部分赞助商:

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

  • MariaDB 自身"开放”的定位
  • 基金会的赞助商的推动(笔者自己YY)

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

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

另外值得一提是,MariaDB 早期版本也使用了来自 Percona 的 XtraDB 引擎。但是从MariaDB 10.2版本之后,又换回了Mysql官方的InnoDB。主要是原因,MariaDB认为在Mysql 5.5之前,XtraDB相对于InnoDB还有一些很大的优势,但是在Mysql 5.5之后,InnoDB已经做了很大的改进,二者已经没有那么大的性能差异;另外,维护XtrabDB意味着时刻需要跟随者官方版本的演进,给开发带来了很大的麻烦。(原文:https://mariadb.com/kb/en/library/why-does-mariadb-102-use-innodb-instead-of-xtradb)。

小提示:之前阅读过我异地多活场景下的数据同步之道这篇文章的同学,应该还有印象,数据库binlog同步解析组件需要解析mysql的binlog。由于MariaDB和官方Mysql已经不完全兼容,因此数据库同步组件通常在一些细节方面对MariaDB进行兼容。

4 如何选择

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

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

对于一些没有数据库内核研发能力的团队,还是建议使用Percona。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。

最后,一个小问题。你知道你们公司使用的是Mysql官方版,亦或是MariaDB、Percona Server两个分支中的哪一个吗?

本文分享自微信公众号 - 田守枝的技术博客(tianshouzhi_blog),作者:田守枝

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 可靠消息一致性的奇淫技巧

    "可靠消息最终一致性"是为了解决Producer端的消息发送与本地事务执行的原子性问题,是一种柔性事务,属于异步确保型,软状态,最终一致。

    田守枝
  • 详解HTTP 与TCP中Keep-Alive机制的区别

    keepalive已经不是什么新鲜的概念了,HTTP协议中有keep-alive的概念,TCP协议中也有keep-alive的概念。二者的作用是不同的。本文将详...

    田守枝
  • 深入理解RocketMQ Rebalance机制

    Rebalance(再均衡)机制指的是:将一个Topic下的多个队列(或称之为分区),在同一个消费者组(consumer group)下的多个消...

    田守枝
  • 棋牌游戏服务器架构: 详细设计(二) 应用层设计

    这里的应用层,指的是CenterServer、LogonServer、LogServer、RoomServer等几个服务器,另外还包括游戏模块的设计。不过游戏...

    李海彬
  • 棋牌游戏服务器架构: 详细设计(二) 应用层设计

    这里的应用层,指的是CenterServer、LogonServer、LogServer、RoomServer等几个服务器,另外还包括游戏模块的设计。不过游戏...

    李海彬
  • 【知识】人工智能数学基础知识

    数学是打开科学大门的钥匙。——培根 数学基础知识蕴含着处理智能问题的基本思想与方法,也是理解复杂算法的必备要素。今天的种种人工智能技术归根到底都建立在数学模型之...

    陆勤_数据人网
  • 棋牌游戏服务器架构: 详细设计(二) 应用层设计

    这里的应用层,指的是CenterServer、LogonServer、LogServer、RoomServer等几个服务器,另外还包括游戏模块的设计。不过游戏...

    李海彬
  • 如何通过函数快速完成年度的薪酬数据的汇总

    我们在做年度薪酬数据分析的时候需要对一年内每个月的薪酬数据进行分析,在进行数据分析的前提工作我们需要对每个月的薪酬数据进行汇总,我们每个月的薪酬数据表格可能...

    王佩军
  • Java设计模式之适配器模式

    今天讲适配器模式,这个模式也很简单,你笔记本上的那个拖在外面的黑盒子就是个适配器,一般你在中国能用,在日本也能用,虽然两个国家的的电源电压不同,中国是220V,...

    CoderJed
  • 浙大首届人工智能本科生9月入学,纳入竺院图灵班

    据澎湃新闻(www.thepaper.cn)报道,刚刚获批的浙江大学人工智能本科专业将于2019年开始招生,学生纳入新设立的竺可桢学院图灵班。

    量子位

扫码关注云+社区

领取腾讯云代金券