在之前的一篇文章中,我们介绍了Apache Web服务器的故事,它在互联网兴起中的作用,以及它的市场份额如何被Nginx等竞争对手所吞噬。 Apache是​​LAMP堆栈的一部分-Linux + Apache + MySQL + PHP–并且说超过一半的互联网都归功于LAMP并不是轻描淡写。

今天我们来看看MariaDB和MySQL之间的一些差异,两种类似但不同的数据库技术用于为全球数百万个网站提供支持。

  • 什么是MySQL
  • 什么是MariaDB
  • MariaDB vs MySQL:兼容性
  • MariaDB与MySQL:分叉背后的原因
  • MariaDB与MySQL:关键差异

MariaDB与MySQL的差异

即使MariaDB是MySQL的一个分支,这两个数据库管理系统仍然完全不同:

  • MariaDB完全获得GPL许可,而MySQL则采用双许可方式。
  • 每个句柄线程以不同的方式汇集。
  • MariaDB支持许多不同的存储引擎。
  • 在许多情况下,MariaDB提供了改进的性能。

支持什么是MySQL

MySQL是一个关系数据库(RDBMS),它首先在1995年由Michael Monty Widenius和David Axmark创建。它是在市场由微软和甲骨文的专有(和昂贵)解决方案主导时创建的。

厌倦了缓慢的WordPress主机和subpar支持?我们在Kinsta做不同的事情。查看我们的托管计划

1998年的旧MySQL页面(图片来源:Archive.org)

MySQL现在是一个典型的品牌。正如我们今天所知,它在建立互联网方面的作用很大。 Linux Journal上的这篇文章对它的早期发表了一些看法。

随着早期采用双重许可 – 并使用GNU GPL作为其免费版本 – MySQL为后来出现的许多其他软件供应商铺平了道路。

在Michael Widenius关于双重许可的话中:

…由于MySQL是一种可以轻松嵌入到其他产品中的基础设施产品,我们可以向那些想要将MySQL嵌入其产品但不想让他们的产品开源的人销售许可证。

服务器部署的Web应用程序作为LAMP堆栈的一部分,通常不会嵌入MySQL并分发其代码。这意味着任何人都可以自由地将软件用于自己的网络产品。

在公开发布不到十年之后,MySQL一直主导着开源关系数据库市场。

谷歌趋势显示,全球网络搜索对MySQL的兴趣在2004年至2005年间达到顶峰:

随着时间推移对MySQL的兴趣

一些使用MySQL的值得注意的公司包括:

  • Facebook,2011年的一份报告提到了“每秒6000万次查询,每秒近400万行更改”和MySQL处理“几乎所有用户交互:喜欢,共享,状态更新,警报,请求”。
  • Netflix的平台计费部分
  • 的Youtube
  • Booking.com
  • 制作的Airbnb
  • 和许多其他人。

另一个有助于提升和采用MySQL的因素是phpMyAdmin。

PhpMyAdmin是一个基于Web的数据库管理工具,可以追溯到1998年,它很早就进入了共享主机提供商的管理控制台,包括cPanel。它是一个用PHP编写的工具,它使得在LAMP服务器上管理MySQL变得容易。导入,导出,编写复杂查询,删除和创建表,进行复杂搜索只是phpMyAdmin无需用户使用Linux终端即可实现的一些功能。

WordPress和MySQL

MySQL受欢迎程度背后的因素之一无疑是WordPress,它现在支持大约60%的CMS系统或34%的整个网络。
WordPress由Matt Mullenweg和Mike Little于2003年创建,作为另一个项目的分支。它是用PHP编写的,它使用MySQL作为它的数据库,当它出现时,它的采用就像野火一样。

WordPress迅速成为开源软件概念的代名词,其底层服务器堆栈也是如此。 DisplayWP有一个很好的图表,显示每个WordPress版本所需的最低MySQL版本。

促进MySQL采用的一个因素是其许可的GPL方面。由于它与Linux兼容,因此它默认包含在Linux发行版中。今天它默认包含在Ubuntu中。

MySQL与关系数据库模型简介

MySQL被设想为RDBMS(关系数据库管理系统)。关系数据库模型可以追溯到20世纪70年代,正如“Codd的十二条诫命”所概述的那样。简而言之,该模型将数据结构化为由列和行组成的表。每一行都由一个键唯一标识(使用SQL术语的主键)。

这些主键可以用作其他表使用的排序的挂钩,以定义与特定行的关系。因此,关系数据库表中的FOREIGN KEY列将引用另一个表中的PRIMARY KEY列,从而定义不同表中的行之间的关系。

正如Essential SQL所解释的那样,“主键由一个或多个列组成,其中包含的数据用于唯一标识表中的每一行。”主键列中的数据必须是唯一的,不能为空或NULL。在关系数据库中“该表只有一个主键,其定义是必需的。”
同时,“外键是表中一个或多个列的集合,引用另一个表中的主键。您没有任何特殊的代码,配置或表定义来正式“指定”外键。“

MySQL中的关系数据库模型

这样,对于关系数据库,可以以复杂的方式对数据建模并定义各种数据之间的连接。在上面的简单示例中,我们有两个表,其中行可以彼此相关,例如。每个人都拥有一辆汽车。

我们可以根据我们需要的逻辑查询这些数据,我们可以根据不同的标准集来过滤结果集,并且我们可以以比上面概述的更复杂的方式构造我们的查询。

因此,关系数据库(通常是数据库)使用特定于域的语言,其中SQL(代表结构化查询语言)是一种流行的语言,如果不是RDBMS唯一使用的语言。

由Sun收购

2008年,MySQL公司之后的MySQL公司被Sun Microsystems收购。该公司创建了JAVA,Solaris Unix OS,并且是不同计算机技术的重要贡献者。正如美国商业资讯报道的那样:

“Sun Microsystems,Inc。(纳斯达克股票代码:JAVA)今天宣布,它已经签署了收购MySQL AB的最终协议,这是一个开源图标和全球发展最快的开源数据库之一的开发商,总代价约为10亿美元”

很快就会证明这次收购不足以阻止Sun的垮台,但它描绘了当时MySQL回归的重要性。

神谕

Oracle Corporation是迄今为止最大的闭源数据库Oracle数据库的供应商。

它是MySQL的直接竞争对手,实际上是MySQL当时正在成为的免费开源软件模型GPL的对立面。

当甲骨文在2010年收购Sun和MySQL时(以IBM为胜利),FOSS世界认为这与“星际迷航”中的Borg攻击一样“险恶”。一个用户在Quora上重新收集事件:

MySQL对Oracle来说是一个严重的威胁 – 当时Oracle数据库占所有收入的80%以上(并且考虑到骨架工作人员需要维护它,甚至更多的利润)。

MySQL正在取得重大进展 – 拥有数百万美元站点许可证的大型财富50强企业正在将数据库(尤其是只读数据库)从Oracle转移到MySQL,因为管理开销要低得多。我知道,我帮助做了其中一些。

MySQL社区中的许多人希望添加一些功能,甚至可以使用免费版本的Oracle过时。 MySQL肯定会走这条路。工具正在成熟,拉里很害怕。

因此,甲骨文收购了MySQL,以确保它可以控制品牌,分散社区,并将其旗舰产品从未洗过的大众中拯救出来。

这是一个合乎逻辑的结论,因为当时的MySQL变得如此受欢迎,以至于它可能被视为对Oracle核心业务的真正威胁。正如Geekflare的Ankush Thakur所说,MySQL变得如此受欢迎,很快,开发人员忘记了SQL和MySQL是两回事。

在收购甚至发生之前,2009年底,当时离开MySQL团队建立自己的分支和数据库公司的Monty Widenius在他的博客上发布了一个引人注目的吸引力(我们将在开头引用):

帮助保存MySQL

我,Michael“Monty”Widenius,MySQL的创建者,我正在急切地要求你帮助从Oracle的掌控中保存MySQL。如果没有您的直接帮助,Oracle可能会在任何一天拥有MySQL。通过写信给欧盟委员会(EC),您可以支持这一事业并帮助确保MySQL作为开源项目的产品的未来发展。

尽管如此,收购仍然持续了一个月,令开源社区的许多人感到沮丧。 Widenius已离开Sun,组建了Monty Program AB,并分叉了MySQL,为MariaDB奠定了基础。同时带走了许多MySQL开发人员。

直到今天,人们仍在质疑蒙蒂恐惧的合法性。特别是,由于最糟糕的情况根本没有发生:Oracle没有获得MySQL只是为了杀死它。

一些人认为MySQL被甲骨文收购只不过是收购Sun的“附带受害者”。早在2009年,那些关注数据库市场的人就有理由担心。

有警告。 MySQL的主要存储引擎开发商InnoDB是一家来自芬兰的公司,2005年被Oracle收购。后来,他们完全合并到Oracle,终止了原来的公司。 2006年,甲骨文收购了另一家不太重要的BDB存储引擎Berkeley DB的创建者。他们在四处转圈。

什么是MariaDB

MariaDB于2009年10月首次发布,版本为5.1.38 Beta,基于MySQL 5.1.38。这是一个旨在“确保MySQL代码库永远免费”的分支。

在分叉时,最常见的担心是收购是以恶意收购为目标杀死MySQL。至少在一定程度上,这种担忧被证明是没有根据的。

同样在2009年,Monty Program AB和提供优质MySQL服务的公司Percona建立了开放数据库联盟。他们的目标是“统一所有与MySQL相关的开发和服务,为涉及MySQL的社区,企业和技术专家所面临的分散和不确定性提供解决方案。”

这个想法是“成为MySQL开源数据库的行业中心,包括MySQL和衍生代码,二进制文件,培训,支持以及MySQL社区和合作伙伴生态系统的其他增强功能”

回顾一下:这些步骤可能会阻止着名数据库出现更糟糕的情况。

MariaDB vs MySQL:兼容性

MariaDB的MySQL分支(以Widenius的女儿命名)的重点是确保未来对MySQL及其进一步开发的访问。这就是为什么MariaDB被认为是一个完整的二进制替代品 – 一个“插入式”替代品,所以说 – 使所有MySQL用户能够在他们的系统上交换另一个用户。

MySQL是一个客户端 – 服务器应用程序,其服务器程序mysqld,其客户端mysql和辅助程序(如mysqldump)与MariaDB保留相同的名称。

用MariaDB替换MySQL成为大多数应用程序和目的的无缝过程,尤其是WordPress。现有的软件,从流行的CMS工具到像phpMyAdmin这样的应用程序,只需开箱即用,实际数据可以从一个导出/导入到另一个,而无需任何更改。

MariaDB的既定目标是保持与MySQL的兼容性。根据MariaDB网站,

  • 数据和表定义文件是兼容的。
  • 所有客户端API和协议都是兼容的。
  • MySQL和MariaDB上的文件名,二进制文件和路径是相同的。
  • 端口和套接字是相同的。
  • 所有MySQL连接器 – PHP,Perl,Python,Java和其他 – 与MariaDB一起使用。
  • MySQL客户端包与MariaDB可以互换,就像MySQL一样。

每月进行合并以确保兼容性并从Oracle获取任何新功能和错误修复。

MariaDB与MySQL:分叉背后的原因

MariaDB版本背后有多种原因。人们担心甲骨文会简单地杀死其不断增长的竞争对手以保护其利润更高的主要产品,这无疑是其中最大的一个。用户将失去一个梦幻般的免费产品!

其他原因与确保MySQL保持免费和开源有关。今天,MariaDB完全获得GPL许可,其全部功能,而MySQL保持双许可方法,具有许可的专有,付费许可证:

“MySQL企业版包括最全面的高级功能,管理工具和技术支持,可实现最高级别的MySQL可扩展性,安全性,可靠性和正常运行时间。它降低了开发,部署和管理业务关键型MySQL应用程序的风险,成本和复杂性。“

如果我们在这里比较两者,MariaDB具有明确的优势,它是由它发布的GPL许可证提供的。由于专有代码库,Oracle无法合法利用MariaDB代码并将其合并到数据库中。

MariaDB在Kinsta的托管堆栈中扮演着至关重要的角色,以确保快速的数据库查询和加载时间。看看我们的计划

Widenius承诺:“当Oracle发布MySQL的封闭源代码扩展时,我们也将发布一个开源代码。”

社区事务

分支背后的另一个原因是保持项目“开放”,因为它是一个社区驱动的项目(如WordPress),其方向和开发就像它的许可一样开放。如果我们看一下提交日志,很容易得出结论,大多数MySQL代码都来自内部开发人员。例如,甲骨文的开发人员感谢来自社区的偶然和显着的贡献,但这远不是MariaDB的开放性,而是远离MySQL曾经的样子。

为了正确看待,在撰写本文时,MariaDB服务器存储库拥有超过186k的提交,370多个分支和200个贡献者。另一方面,MySQL拥有超过148k的提交,9个分支和72个贡献者。

关于MariaDB开发,方向,功能投票等的讨论是在公开的邮件列表上完成的:

“玛丽亚开发者”团队

除此之外,还有Maria Discuss邮件列表。

Maria Captains是一个由可信赖的开发人员组成的团队,开发人员可以向其提交补丁正如Launchpad上的团队页面所说:

“船长是值得信赖的开发人员,拥有对主要MariaDB树的写入权限。如果你想在树中有一个补丁,请将它提交给maria-developers列表,一个或多个队长将与你合作,让补丁得到审核,批准并最终推送到相应的MariaDB树中。“

在某些情况下,MariaDB活跃的开发过程证明了它优于甲骨文的优势。

2012年底,MariaDB基金会成立,负责监督数据库的开发。

在fork之后不久,许多原始的MySQL开发人员跳槽并加入了MariaDB项目。 Red Hat,CentOS,Arch Linux,Debian,OpenSuse,Slackware,Fedora等Linux供应商切换到MariaDB作为默认RDBMS,以及BSD发行版,FreeBSD和OpenBSD,而Ubuntu包含MariaDB。整个列表可以在这里找到。

阿里巴巴云,腾讯,IBM,微软,Booking.com等公司成为白金赞助商。

对于Kinsta来说,作为最好的托管WordPress托管,有趣的是,在MariaDB基金会董事会中,有来自Automattic的人,这是WordPress的创建者已经接受了MariaDB的明显标志。

在分裂之后的几年里,MariaDB得到了很好的发展,由于2012年推出了全套新功能,MariaDB从5. *版本号跳转到10.0版本,希望能够反映出它已经实现的功能。

由于性能原因,维基媒体基金会在2013年宣布将维基百科转换为MariaDB。谷歌也发生了同样的事情,其用户名单现在包括德意志银行,星展银行,纳斯达克,Verizon,Craigslist等。

在MySQL用户中,我们有GitHub,美国海军,NASA,特斯拉,Netflix,微信,Facebook,Zendesk,Twitter,Zappos,YouTube,Spotify。

谷歌搜索趋势显示:自首次发布以来,对MySQL继任者的兴趣一直在稳步增长:

随着时间的推移对MariaDB的兴趣

MariaDB与MySQL:关键差异

虽然MariaDB可能已经开始与MySQL完全兼容,但我们可以预期它们的路径在未来会有更多分歧。

MariaDB与MySQL

在他的上一篇博客文章中,Widenius祝贺Oracle在MySQL版本8.0上的工作,概述了一些差异和注意事项,例如:

线程池:类似于Nginx服务器解决的问题,与Apache相比,MySQL正在为每个客户端连接分配线程,而这可以与在PC中启动整个程序进行比较,效率很低。 MariaDB在5.5版本中引入了自己的解决方案

Invisible Columns是MariaDB在10.3.3中的独有功能。它们不会在SELECT *语句中返回结果,也不需要在INSERT语句中赋值。

MariaDB在其temporal数据类型中引入了微秒。

存储引擎:MariaDB使用包括XtraDB,InnoDB,MariaDB ColumnStore,Aria,Archive,Blackhole,Cassandra存储引擎,Connect,CSV,FederatedX,内存存储引擎,Merge,Mroonga,MyISAM,MyRocks,QQGraph,Sequence Storage Engine,SphinxSE,Spider ,TokuDB。 ColumnsStore在性能方面很有趣,因为它可以进行线性扩展以处理数PB的数据。更多关于它的博客。

MySQL存储引擎是InnoDB,MyISAM,Memory,CSV,Archive,Blackhole,Merge,Federated,Example。

数据库视图是MariaDB通过仅查询必要的表引入重要优化的功能。

MySQL引入的一些功能是JSON本机数据类型,MySQL 8.0版本中的MySQL Shell – 允许使用javascript和python脚本 – 并且不能与基于SHA-256的基于身份验证插件的MariaDB一起使用,从而提高了对mysql_native_password的安全性。

在这里,您可以找到MariaDB与MySQL之间的完整差异列表,以及与后者相比前者的优势。

MariaDB vs MySQL:最好的选择是什么?在我们最新的纲要中了解这些数据库技术背后的故事! ?点击鸣叫摘要

MySQL是世界上最大的商业数据库供应商的企业保护伞。有这么多全职工程师全天候工作以开发高级新功能,我们已经有了一些分歧点。另一方面,MariaDB在增加额外费用时通常会赶上,但并不总是立竿见影,并且没有任何保证。

尽管如此,有很多场景可以让MariaDB提供更好的性能。再添加更灵活的补丁和更新,更稳定的开源未来,以及更多的乐观,你会明白为什么在Kinsta我们不仅是粉丝,而且还使用MariaDB作为我们性能驱动的服务器堆栈的一部分。

0股

.essb_links .essb_links_list li a {margin-top:0px; } @media only screen and(min-width:64em){.container – narrow.pb – 60,.knowledgebase .user-content {position:relative; } .widget-share {position:absolute;左:-200px;顶部:0px;身高:100%;宽度:200px; box-sizing:border-box; } .widget-share-aligner {width:200px; padding-right:62px; box-sizing:border-box; } .widget-share-inner {padding-bottom:62px; } .knowledgebase .user-content .widget-share-inner {padding-top:0; } .widget-share .amount {display:flex; align-items:center;证明内容:flex-end;宽度:100%;保证金右:11像素; font-size:14px;字体重量:500;边距:10px的; } .widget-share .amount svg {margin-right:8px;保证金左:10px的; } .essb_links .essb_links_list {flex-direction:column; align-items:flex-end; } .essb_links .essb_links_list li {display:block; margin-bottom:5px!important; } .widget-share__total {margin-bottom:0px!important; } .widget-share__total .heading – small {color:#999999;字体大小:14px的; font-weight:300; } .essb-total-value {margin-right:4px; } .essb_links {margin:0px;填充:0像素; } .essb_counter_right {display:none!important; } .essb_links.essb_template_circles-retina .essb_link_hackernews a,.essb_links.essb_template_circles-retina .essb_link_reddit a,.essb_links.essb_template_circles-retina .essb_link_mail a,.essb_links.essb_template_circles-retina .essb_link_mwp a,.essb_links.essb_template_circles-retina .essb_link_buffer a ,.essb_links.essb_template_circles-retina .essb_link_linkedin a,.essb_links.essb_template_circles-retina .essb_link_facebook a,.essb_links.essb_template_circles-retina .essb_link_twitter a {color:#43414e!important;背景:#f3f3f6!important; } .essb_links.essb_template_circles-retina li a:focus,.essb_links.essb_template_circles-retina li a:hover {border-color:#fff!important;背景:#43414e!important; {.binter-color:#f3f3f6!important;背景:#f3f3f6; } .essb_links .essb_icon:在{font-size:15px!important;之前顶:8像素;左:9px; } .essb_links .essb_icon {width:32px;高度:32PX; } .essb_links.essb_counter_modern_right .essb_counter_right {background:#f3f3f6!important; } @media only screen and(max-width:63.999em){。widget-share-aligner {position:relative!important;顶部:0!重要; } .essb_links .essb_links_list li {margin-right:8px!important; }}