在此前的文章中,我们阐述了Apache Web服务器的故事、它在互联网兴起中的作用,以及它的市场份额如何被Nginx等竞争对手蚕食。Apache是部分LAMP堆栈–Linux + Apache+ MySQL+ PHP –它不是一个轻描淡写地说,超过所有的互联网欠它的存在对LAMP的一半。
今天我们将看看MariaDB和MySQL之间的一些差异,这两种相似但不同的数据库技术用于支持全球数百万个网站。
尽管MariaDB是MySQL的一个分支,但这两个数据库管理系统仍然有很大的不同:
- MariaDB是完全GPL许可的,而MySQL采用双许可方法。
- 每个句柄线程池以不同的方式。
- MariaDB支持许多不同的存储引擎。
- 在许多情况下,MariaDB提供了改进的性能。
什么是MySQL
MySQL是一种关系数据库 (RDBMS),由Michael Monty Widenius和David Axmark创建,于1995年首次出现。它是在市场由Microsoft和Oracle的专有(且昂贵)解决方案主导时创建的。
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系统或整个Web的34%。WordPress由Matt Mullenweg和Mike Little于2003年创建,作为另一个项目的分支。它是用PHP编写的,它使用MySQL作为它的数据库,当它出现时,它的采用就像野火一样。
WordPress很快成为开源软件概念的代名词,其底层服务器堆栈也是如此。DisplayWP有一个图表,列出了每个WordPress版本所需的最低MySQL版本。
推动MySQL采用的因素之一是其许可的GPL方面。由于它与Linux兼容,因此默认情况下它开始包含在Linux发行版中。今天,它默认包含在Ubuntu中。
MySQL和关系型数据库模型的简要概述
MySQL被设想为RDBMS(关系数据库管理系统)。关系数据库模型可以追溯到1970年代,正如“Codd的十二条诫命”所概述的那样。简而言之,该模型将数据组织成由列和行组成的表。每行都由一个键(主键使用SQL术语)唯一标识。
这些主键可以用作其他表用来定义与特定行的关系的排序的挂钩。因此,关系数据库表中的FOREIGN KEY列将引用另一个表中的PRIMARY KEY列,从而定义不同表中行之间的关系。
作为基本SQL解释, “主键由其数据包含在用于一个或多个列的唯一标识表中的每一行。” d在主键列ATA必须是唯一的,而不能为空或NULL。在关系数据库中,“表只有一个主键,它的定义是强制性的。”同时,“外键是一个表中的一组一个或多个列,引用另一个表中的主键。无需放置任何特殊代码、配置或表定义来正式“指定”外键。
MySQL中的关系数据库模型
这样,对于关系数据库,就可以以复杂的方式对数据进行建模并定义各种数据之间的连接。在上面的简单示例中,我们有两个表,其中的行可以相互关联,例如。每个人都拥有一辆汽车。
我们可以根据我们需要的逻辑查询这些数据,我们可以根据不同的条件集过滤结果集,我们可以用比上面概述的复杂得多的方式构造我们的查询。
出于这个原因,关系数据库——以及一般的数据库——使用特定于领域的语言,其中SQL(代表结构化查询语言)是RDBMS使用的流行语言,如果不是唯一的话。
被Sun收购
2008年,MySQL背后的公司MySQL AB被Sun Microsystems收购。该公司创建了JAVA、Solaris Unix操作系统,并且是不同计算机技术的重要贡献者。正如美国商业资讯当时报道的那样:
“Sun Microsystems, Inc.(纳斯达克股票代码:JAVA)今天宣布已达成最终协议,以约10亿美元的总对价收购MySQL AB,这是一家开源图标和世界上增长最快的开源数据库之一的开发商。”
很快就会证明这次收购并不足以阻止Sun的垮台,但它描绘了MySQL在那个时代的规模有多大。
甲骨文
Oracle Corporation是迄今为止最大的闭源数据库Oracle数据库的供应商。
它是MySQL的直接竞争对手,实际上是MySQL那时正在成为的GPL、免费、开源软件模型的对立面。
当甲骨文在2010年购买Sun和MySQL时(因为它战胜了IBM),FOSS世界认为这就像星际迷航中的博格攻击一样“险恶”。一位用户回忆了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的创造者,迫切请求您帮助将MySQL从Oracle的魔掌中拯救出来。如果没有您的直接帮助,甲骨文现在随时都可能拥有MySQL。通过写信给欧盟委员会 (EC),您可以支持这一事业并帮助确保产品MySQL作为开源项目的未来发展。
尽管如此,这次收购还是在一个月后完成了,这让开源社区的许多人感到沮丧。Widenius已经离开了Sun,成立了Monty Program AB,并创立MySQL分支,为MariaDB奠定了基础。与此同时,他还带走了许多MySQL开发人员。
时至今日,人们仍在质疑蒙蒂恐惧的合法性。特别是,因为最坏的情况根本没有发生:Oracle收购MySQL并不是为了杀死它。
一些人争辩说,甲骨文购买MySQL只不过是收购Sun的“附带受害者”。早在2009年,那些关注数据库市场的人就有理由担心。
有警告。MySQL的主要存储引擎开发商InnoDB是一家芬兰公司,2005年被甲骨文公司收购,后来完全并入甲骨文公司,终止了原来的公司。2006 年,甲骨文收购了Berkeley DB的创建者,后者是另一个不太重要的BDB存储引擎的提供商。他们围着转。
什么是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与MySQL:兼容性
MariaDB的MySQL分支(以 Widenius 的女儿命名)的全部意义在于确保未来对MySQL的访问及其进一步发展。这就是为什么MariaDB被设想为一个完整的二进制替代品——可以说是一种“插入式”替代品——使MySQL的所有用户能够在他们的系统上交换另一个。
MySQL是一个客户端-服务器应用程序,它的服务器程序mysqld、它的客户端mysql和辅助程序,如mysqldump,都与MariaDB保持相同的名称。
对于大多数应用程序和目的,尤其是WordPress,用MariaDB替换MySQL成为一个无缝的过程。现有软件,从流行的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代码并将其合并到他们的数据库中。
Widenius承诺:“当Oracle发布MySQL的闭源扩展时,我们也将发布一个开源扩展。”
社区事务
分支背后的另一个原因是保持项目“开放”,因为它是一个社区驱动的项目(如WordPress),其方向和发展就像其许可证一样开放。如果我们查看提交日志,很容易得出结论,大多数MySQL代码来自内部开发人员。例如,Oracle的开发人员感谢社区偶尔做出的显着贡献,但这与MariaDB的开放性相去甚远,也与MySQL过去相去甚远。
从长远来看,在撰写本文时,MariaDB服务器存储库有超过186k次提交、370多个分支和200名贡献者。另一方面,MySQL有超过148k次提交、9个分支和72个贡献者。
关于MariaDB开发、方向、功能投票等的讨论是在公开可用的邮件列表上完成的:
“Maria开发者”团队
除了这个,还有Maria Discuss邮件列表。
Maria Captains是一个值得信赖的开发人员团队,开发人员可以向他们提交补丁。正如团队在Launchpad上的页面所说:
“船长是值得信赖的开发人员,拥有对主要 MariaDB 树的写访问权限。如果您想在树中添加补丁,请将其提交到maria-developers列表,一位或多位负责人将与您一起审查、批准补丁并最终推送到适当的MariaDB树中。”
在某些情况下,MariaDB活泼的开发过程证明了其优于Oracle封闭式开发的优势。
2012年底,MariaDB基金会成立,负责监督数据库的开发。
在分支之后不久,许多MySQL的原始开发人员跳槽并加入了MariaDB项目。Linux供应商如Red Hat、CentOS、Arch Linux、Debian、OpenSuse、Slackware、Fedora切换到MariaDB作为默认RDBMS,以及BSD发行版、FreeBSD和OpenBSD,而Ubuntu包括MariaDB。可以在此处找到整个列表。
阿里云、腾讯、IBM、微软、Booking.com等公司成为白金赞助商。
值得一提的是,MariaDB基金会的董事会中有来自Automattic的人,这清楚地表明WordPress的创建者已经接受了MariaDB。
分支后的几年里,MariaDB的发展非常活跃,以至于由于2012年推出的整套新特性,MariaDB从兼容MySQL的 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在其时间数据类型中引入了microseconds。
存储引擎:MariaDB使用包括XtraDB, InnoDB, MariaDB ColumnStore, Aria, Archive, Blackhole, Cassandra Storage Engine, Connect, CSV, FederatedX, Memory storage engine, 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脚本——并且不适用于MariaDB,基于SHA-256的身份验证插件,提高了mysql_native_password的安全性。
在这里您可以找到MariaDB与MySQL之间差异的完整列表,以及前者与后者相比的优势。
小结
MySQL隶属于世界上最大的商业数据库供应商。有这么多全职工程师日以继夜地工作以开发优质的新功能,我们已经有了一些分歧点。另一方面,MariaDB通常会在高级添加方面迎头赶上,但这并不总是立竿见影的,也没有任何保证。
尽管如此,MariaDB在许多场景中都提供了改进的性能。再加上更敏捷的补丁和更新、更稳定的开源未来以及更多的乐观。
评论留言