缘起

自从甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险。而且Oracle对培养MySQL这个免费的儿子并不太用心,漏洞修补和版本升级的速度一段时间非常缓慢,所以业界对MySQL的未来普遍不抱有乐观态度。因此社区采用分支的方式来避开这个风险,例如谷歌、Facebook、RedHat都将MySQL替换成了衍生版,国内也有企业纷纷放弃了MySQL官方版,像阿里和腾讯还做起了自己的MySQL衍生版。

目前MySQL领域存在着众多的衍生版数据库,主流的有官方MySQL、MariaDB以及Percona Server,小众一些的还有阿里的OceanBase和腾讯的CDB等等。那么Percona和MariaDB这两个主要的MySQL分支是怎么产生的呢?

MariaDB

起初MySQL之父Monty在1979年写下MySQL的第一行代码,后来逐渐创建起MySQL公司,后将其以10亿美金卖给Sun,结果Sun又把MySQL转手卖给Oracle,Monty愤而出走,以MySQL5.5为基础创造了MariaDB数据库,这样就诞生出了MySQL分支里知名度最高的一个衍生版。

Percona Server

Percona Server是MySQL咨询公司Percona发布的性能最接近MySQL企业版的MySQL产品。Percona公司在MySQL数据库优化方面做了非常多的工作,以至于Percona Server数据库是MySQL众多分支中,在高负载、高并发情况下表现非常突出,乃至阿里巴巴的OceanBase数据库都要借鉴Percona Server。

性能接近

其实在正常情况下,MariaDB和Percona Server的性能是差不多的,为什么是这样呢?

MySQL 4和5使用MyISAM作为默认存储引擎。从MySQL 5.5开始,就将默认存储引擎从MyISAM更改为InnoDB。这是因为长期以来MyISAM没有提供事务支持,使得MySQL游离在数据强一致性的门槛之外,正是InnoDB的加入,在使得MySQL从Oracle市场份额中分一杯羹。

我们先看看MariaDB使用的存储引擎。因为版权的原因,MariaDB一开始就放弃了InnoDB这个让MySQL大放异彩的存储引擎,最终选择了XtraDB引擎作为InnoDB的替代。

一方面,XtraDB引擎能做到的向下兼容,创建数据表的时候,InnoDB引擎会自动被替换成XtraDB引擎,用户和客户端根本感觉不到MariaDB和MySQL的区别。另外一方面,XtraDB的对事务的良好支持,让用户也感受不到XtraDB和InnoDB的区别。另外,在多核CPU和大内存上,XtraDB性能比InnoDB更好。

说到这里还要补充一句,XtraDB引擎是Percona公司开发设计的,与MySQL5.1内置的InnoDB相比,单位时间执行事务数量是后者的2.7倍。而且在Percona Server上面默认使用的也是XtraDB引擎。所以说MariaDB和Percona Server在正常情况下的性能基本持平。但是在高并发和高负载的条件下,Percona Server的表现更好一些。

部署平台

MariaDB的跨平台性更好一些,支持Windows平台和Linux平台,但是不支持MacOS平台。如果在MacOS平台上安装MacOS需要先安装Brew。

Percona Server不支持跨平台,只能在Linux平台安装

兼容性

MariaDB与Percona Server各自选择了对MySQL兼容的方式。MariaDB的起点是MySQL5.5,然后对MySQL改造,并且与MySQL5.6以上版本存在很大的差别。比如在单表保存一对多关系数据上面,MariaDB选择了DynamicColume(动态列)实现方式,而MySQL选择的是JSON方式。虽然都是一对多关系,但是MariaDB动态列的方式使用非常繁琐,也不支持数组格式,相反MySQL的实现就好很多。另外MariaDB的动态不支持索引,因此说按照动态列中的字段查找数据速度会很慢,而MySQL支持JSON索引,查询速度会快很多。

Percona Server与MariaDB不同,它是先兼容MySQL然后再进行优化,所以用户可以很容易的从MySQL迁移到Percona Server上面,而不用去考虑兼容性的问题。

选择

选择是痛苦的事情,对于MariaDB和Percona Server两个数据库,各大公司也存在分歧,淘宝使用的是Percona Server,而Google和Facebook则站在了MariaDB这边。从中我们可以看出,注重数据库稳定性和可靠性的企业都会选择Percona Server,包括利用Percona Server组建的Percona XtraDB Cluster集群,都体现的严格的数据读写一致性,这对于商业系统来说极为重要,读写速度来说仅仅是第二位的。那些数据价值低,注重数据读写速度的企业,更喜欢使用MariaDB,因为用MariaDB组建Replication集群,在保存SEO搜索、论坛帖子、新闻资讯、社交信息上速度更快。

说到这里,选择MariaDB还是Percona Server,唯一衡量的标志为是否存储商业数据。

链接:http://www.imooc.com/article/30432

Percona,MariaDB,MySQL衍生版如何取舍的更多相关文章

  1. MariaDB/MySQL备份和恢复(三):xtrabackup用法和原理详述

    本文目录: 1.安装xtrabackup 2.备份锁 3.xtrabackup备份原理说明 3.1 备份过程(backup阶段) 3.2 准备过程(preparing阶段) 3.3 恢复过程(copy ...

  2. MariaDB mysql 比较区别 选择

    MariaDB数据库管理系统是MySQL的一个分支 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险. MariaDB的目的是 ...

  3. CentOS 7 下安装 LEMP 服务(nginx、MariaDB/MySQL 和 php)

    原文 CentOS 7 下安装 LEMP 服务(nginx.MariaDB/MySQL 和 php) LEMP 组合包是一款日益流行的网站服务组合软件包,在许多生产环境中的核心网站服务上起着强有力的作 ...

  4. (MariaDB/MySQL)之DML(1):数据插入

    本文目录: 1.insert和replace插入数据 1.1 insert into values() 1.2 insert into set 1.3 insert into select_state ...

  5. [daily][mariadb][mysql] mariadb快速设置

    参考: https://wiki.archlinux.org/index.php/MySQL 1. 安装 使用pacman常规安装 2. btrfs 禁用CoW mariadb的数据文件如果存储在bt ...

  6. CentOS 下安装 LEMP 服务(nginx、MariaDB/MySQL 和 php)

    转载自:https://linux.cn/article-4314-1.html 编译自:http://xmodulo.com/install-lemp-stack-centos.html 作者: D ...

  7. CentOS通过yum安装MariaDB(MySQL)无法启动服务或者找不到mysql.sock

    转载自:http://www.linuxidc.com/Linux/2016-03/129396.htm 今天在Linux主机(CentOS 7)安装(yum install方式)Mariadb(即开 ...

  8. 安装mariadb/mysql 连接失败问题

    在linux下安装mariadb会出现一系列问题 问题1->服务器端不需要用户名密码就可登陆数据库 问题2->php使用mysql不能连接数据库 访问受限 问题3->navicate ...

  9. [转载]CentOS 下安装LEMP服务(Nginx、MariaDB/MySQL和PHP)

    LEMP 组合包是一款日益流行的网站服务组合软件包,在许多生产环境中的核心网站服务上起着强有力的作用.正如其名称所暗示的, LEMP 包是由 Linux.nginx.MariaDB/MySQL 和 P ...

随机推荐

  1. IObit Driver Booster 无法更新驱动的解决办法

    IObit Driver Booster 无法更新驱动的解决办法:依次打开软件中的 菜单-设置-网络-自定义代理设置-主机:填入210.101.131.231 端口:8080 最后点确定完成. 注意! ...

  2. MySQL Error--存储inode用完后报设备没有空间

    问题描述:磁盘有足够剩余空间,但在创建文件或文件夹时报错,提示“设备没有空间”. 问题原因:当存储设备通过分区格式化为文件系统后,会分为两部分:1.block部分: 存储的最小单位为扇区(Sector ...

  3. MaxScale ERROR 2006 (HY000): MySQL server has gone away

    Error: MaxScale cannot be run as root.Failed to write child process message!解决办法:# maxscale -f /etc/ ...

  4. [daily] 使用thunderbird通过davmail代理访问Microsoft Exchange Service(OWA)

    前言 我需要接入某企业的邮件服务器, 该服务器没有开通pop3, 没有smtp, 没有imap, 只有exchange. 也就是说必须要使用outlook才能访问. 但是我没有outlook. 方案一 ...

  5. h5中history实例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. RQM — 需求驱动的测试管理工具

    嵌入式系统复杂程度越来越高,随之而来的测试要求和任务也越来越繁重,而测试更多的是对产品满足需求情况的测试,因此,在高强度.高频度的测试过程中,难免有需求遗漏.回归测试不充分.缺陷管理不合理.测试人员疏 ...

  7. linux系统编程之进程(三)

    今天继续学习进程相关的东东,继上节最后简单介绍了用exec函数替换进程映像的用法,今天将来深入学习exec及它关联的函数,话不多说,正式进入正题: exec替换进程映象:   对于fork()函数,它 ...

  8. 《你们都是魔鬼吗》第八次团队作业:第一天Alpha冲刺

    <你们都是魔鬼吗>第八次团队作业:Alpha冲刺 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 你们都是魔鬼吗 作业学习目标 完成最 ...

  9. Java - 框架之 MyBites

    一. 开发步骤: 1. 创建 PO (model) 类,根据需求创建. 2. 创建全局配置文件 sqlMapConfig.xml. 3. 编写映射文件. 4. 加载映射文件, 在 SqlMapConf ...

  10. bzoj 5408: string 后缀自动机 + LCT

    联赛前练练码力. code: #include <vector> #include <cstdio> #include <cstring> #include < ...