当前位置:首页 > 公众号精选 > 架构师社区
[导读]近年来,不少程序员在吹捧 MariaDB,抛弃 MySQL。本文总结了一些  MariaDB 强过 MySQL 的地方,分享给大家!

近年来,不少程序员在吹捧 MariaDB,抛弃 MySQL。本文总结了一些  MariaDB 强过 MySQL 的地方,分享给大家!

图片来自 Pexels

MySQL 的发展史

MySQL 的历史可以追溯到 1979 年,它的创始人叫作 Michael Widenius,他在开发一个报表工具的时候,设计了一套 API。
后来他的客户要求他的 API 支持 sql 语句,他直接借助于 mSQL(当时比较牛)的代码,将它集成到自己的存储引擎中。但是他总是感觉不满意,萌生了要自己做一套数据库的想法。

	
	
	
	
	

一到 1996 年,MySQL 1.0 发布,仅仅过了几个月的时间,1996 年 10 月 MySQL 3.11.1 当时发布了 Solaris 的版本,一个月后,Linux 的版本诞生,从那时候开始,MySQL 慢慢的被人所接受。

1999 年,Michael Widenius 成立了 MySQL AB 公司,MySQL 由个人开发转变为团队开发,2000 年使用 GPL 协议开源。

2001 年,MySQL 生命中的大事发生了,那就是存储引擎 InnoDB 的诞生!直到现在,MySQL 可以选择的存储引擎,InnoDB 依然是 No.1。

2008 年 1 月,MySQL AB 公司被 Sun 公司以 10 亿美金收购,MySQL 数据库进入 Sun 时代。

Sun 为 MySQL 的发展提供了绝佳的环境,2008 年 11 月,MySQL 5.1 发布,MySQL 成为了最受欢迎的小型数据库。

在此之前,Oracle 在 2005 年就收购了 InnoDB,因此,InnoDB 一直以来都只能作为第三方插件供用户选择。

2009 年 4 月,Oracle 公司以 74 亿美元收购 Sun 公司,MySQL 也随之进入 Oracle 时代。

2010 年 12 月,MySQL 5.5 发布,Oracle 终于把 InnoDB 做成了 MySQL 默认的存储引擎,MySQL 从此进入了辉煌时代。

然而,从那之后,Oracle 对 MySQL 的态度渐渐发生了变化,Oracle 虽然宣称 MySQL 依然遵守 GPL 协议,但却暗地里把开发人员全部换成了 Oracle 自己人。

开源社区再也影响不了 MySQL 发展的脚步,真正有心做贡献的人也被拒之门外,MySQL 随时都有闭源的可能……

横空出世的 MariaDB 是什么鬼

先提一下 MySQL 名字的由来吧,Michael Widenius 的女儿的简称就是 MY,Michael Widenius大 概也是把 MySQL 当成自己的女儿吧。

看着自己辛苦养大的 MySQL 被 Oracle 搞成这样,Michael Widenius 非常失望,决定在 MySQL 走向闭源前,将 MySQL 进行分支化,依然是使用了自己女儿的名字 MariaDB(玛莉亚 DB)。

MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可 MariaDB 的目的是完全兼容 MySQL,包括 API 和命令行,使之能轻松成为 MySQL 的代替品。

在存储引擎方面,使用 XtraDB 来代替 MySQL 的 InnoDB。MariaDB 由 MySQL 的创始人 Michael Widenius 主导,由开源社区的大神们进行开发。

因此,大家都认为,MariaDB 拥有比 MySQL 更纯正的 MySQL 血脉。最初的版本更新与 MySQL 同步,相对 MySQL5 以后的版本,MariaDB 也有相应的 5.1~5.5 的版本。
后来 MariaDB 终于摆脱了 MySQL,它的版本号直接从 10.0 开始,以自己的步伐进行开发,当然,还是可以对 MySQL 完全兼容。现在,MariaDB 的数据特性、性能等都超越了 MySQL。

测试环境

本性能测试环境如下:

  • CPU:I7

  • 内存:8G

  • OS:Windows 10 64位

  • 硬盘类型:SSD

  • MySQL:8.0.19

  • MariaDB:10.4.12

分别在 MySQl 和 MariaDB 中创建名为 performance 的数据库,并创建 log 表,都使用 innodb 作为数据库引擎:

CREATE TABLE `performance`.`log`( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `time` DATETIME NOT NULL, `level` ENUM('info','debug','error') NOT NULL, `message` TEXT NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB CHARSET=utf8;

插入性能

单条插入
单条插入的测试结果如下表所示:

MariaDB 单条数据插入的性能比 MySQL 强 1 倍左右。

批量插入

批量插入的测试结果如下表所示:

上面的测试结果,MariaDB 并没有绝对优势,甚至有时还比 MySQL 慢,但平均水平还是高于 MySQL。

查询性能
经过了多次插入测试,我两个数据库里插入了很多数据,此时用下面的 sql 查询表中的数据量:

SELECT COUNT(0) FROM LOG 

结果两个表都是 6785000 条,MariaDB 用时 3.065 秒,MySQL 用时 6.404 秒。

此时我机器的内存用了 6 个 G,MariaDB 用了 474284 K,MySQL 只用了 66848 K。看来 MariaDB 快是牺牲了空间换取的。

无索引
先查询一下 time 字段的最大值和最小值:

SELECT MAX(TIME), MIN(TIME) FROM LOG 

MariaDB 用时 6.333 秒,MySQL 用时 8.159 秒。接下来测试过滤 time 字段在 0 点到 1 点之间的数据,并对 time 字段排序:

SELECT * FROM LOG WHERE TIME > '2020-02-04 00:00:00' AND TIME < '2020-02-04 01:00:00' ORDER BY TIME 

MariaDB 用时 6.996 秒,MySQL 用时 10.193 秒。然后测试查询 level 字符是 info 的数据:

SELECT * FROM LOG WHERE LEVEL = 'info' 

MariaDB 用时 0.006 秒,MySQL 用时 0.049 秒。最后测试查询 message 字段值为 debug 的数据:

SELECT * FROM LOG WHERE MESSAGE = 'debug' MariaDB 用时 0.003 秒,MySQL 用时 0.004 秒。 

有索引

分别对两个数据库的字段创建索引:
ALTER TABLE `performance`.`log` ADD INDEX `time` (`time`), ADD INDEX `level` (`level`), ADD FULLTEXT INDEX `message` (`message`);

MariaDB 用时 2 分 47 秒,MySQL 用时 3 分 48 秒。再用上面的测试项目进行测试,结果如下表所示:

有些结果添加了索引后还不如不加索引时理想,说明实际使用时并不是每个字段都需要添加索引的。

总结
在上面的测试中 MariaDB 的性能的确优于 MySQL,看来各大厂商放弃 MySQL 拥抱 MariaDB 还是非常有道理的。

	
	
	
	
	


	
	
	
	
	

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

6月21日,数据库国际顶级学术会议SIGMOD在美国西雅图举行,阿里云与浙江大学关于数据库漏洞检测新方法的论文,荣获2023年最佳论文奖。这一新方法较以往方案提速近100倍,被审稿人评价为漏洞检测新范式。这也是SIGMO...

关键字: 数据库 MySQL PolarDB

摘 要:以Java语言和MySQL数据库为基础,在Myeclipse工具上开发了一款适合公司员工使用的(项目)任务分派系统。该系统的主要功能是管理公司的任务以及发放给自己的任务,包括管理员工的基本信息(奖惩信息),以及员...

关键字: 任务分派系统 Java MySQL Myeclipse

摘 要 :鉴于植物自动辨识较为困难,以 Java 语言为核心,运用 SSM 框架、MySQL 数据库以及 Tomcat 服务器开发植物辨识交互系统。该系统实现了植物识别、野外互动、用户信息管理与植物信息管理等四个功能模块...

关键字: Java SSM MySQL Tomcat 辨识 管理

摘要:该项目是基于当今互联网技术构建的、基于高校教学内容的服务平台,旨在建立一个教学资源共享与师生互相交流的平台,从而减轻教师在传统教学中的工作负担,同时也为学生提供更广阔的学习空间。介绍了教学服务平台的主要建设内容以及...

关键字: Dreamweaver 教学资源 MySQL 模块

摘 要 :为了解决二手书被大量贱卖、焚烧、随意丢弃造成的一系列问题,文中采用 MySQL 和 Java 技术设计并实现了二手书交易系统,使大量未被有效利用的二手书籍在该系统能够得到合理利用,让更多的人享受到二手书 籍应有...

关键字: 二手书 MySQL Java 交易系统

摘要:针对当前网络文件管理系统发展的需要,以PHP和MySQL技术为重点,设计了一种基于PHP技术的网络文件管理系统,以提供文件上传、下载等存储服务和文件浏览、更新、分类、分享等管理服务。该系统操作界面友好,处理效率高,...

关键字: PHP MySQL 网络文件 管理系统

摘 要:“Apache+php+ MySQL”组成了一套完整的开发B/S架构的网络信息系统的工具。文中以该套工具开发产品售后服务管理系统为例,介绍了开发过程中的技术难点及解决方法。

关键字: Apache php MySQL 产品售后服务管理系统

摘 要:为了网购平台能在服务器端更加有效而稳定的运行,以JavaEE的SSH框架和MySQL数据库为基础,结合JQuery 等技术,利用Eclipse开发了一个网络商城系统。该系统主要分为前台和后台两个部分,前台供用户注...

关键字: JavaEE SSH MySQL Eclipse 网络商城系统

在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

关键字: MySQL 范式 事务

在MySQL中我们通常会采用limit来进行翻页查询,比如limit(0,10)表示列出第一页的10条数据,limit(10,10)表示列出第二页。

关键字: MySQL limit SQL
关闭
关闭