Mysql与MariaDB技术选型对比

第1章技术选型
1.1.概要
开源数据库系统可从Oracle,Microsoft,Google,Amazon和Rackspace等各种供应商处获得。开源数据库管理系统(DBMS)的历史并不长。第一个可用的开源数据库管理系统是MySQL,它于1995年推出,直到今天,它已经有很多重大的改进,使其成为商业数据库软件的强大竞争对手。
开源数据库管理系统越来越受欢迎,不仅因为它们功能丰富,成本低廉,而且还因为它们的操作效率。用户享受在根据个人需求定制源代码时的*,以及少量的编程知识是也是一个加分项。Gartner报告说,开源数据库管理系统每年增长42%,到2020年这个行业的价值将达到80亿美元。报告中约80%的用户使用某种开源软件,包括数据库管理系统(DBMS)。像微软和IBM这样的各种商业供应商也提供他们数据库管理系统(DBMS)软件的“快速版”。
最广泛采用的开源数据库管理系统(DBMS)是MySQL和MariaDB。本文讨论它们的相似之处,差异和相对优点。
数据库是以表格形式保存数据的特定结构。支持通过基于表格结构的数据流的软件称为数据库管理系统(DBMS)。使用最广泛的数据库管理系统(DBMS)是关系数据库管理系统(RDBMS)。数据库管理系统(DBMS)是一种计算机软件应用程序,可与终端用户,其他应用程序和数据库本身交互以捕获数据。通用数据库管理系统允许定义,创建,查询,更新和管理数据库。
数据库及其数据的功能是:
数据定义:创建,修改和删除为数据组织奠定基础的定义
数据更新:插入,修改和删除数据
检索:通过进行特定查询从整个数据库检索数据
管理:用户创建和修改,数据安全性,性能监控,数据完整性,并发控制和数据恢复
因此,数据库系统是数据库模型,数据库管理系统(DBMS)和数据库的组合。
1.2.MySQL
MySQL是一个用C和C ++编写的开源多线程关系数据库管理系统(RDBMS)。MySQL由瑞典公司MySQL AB创建,该公司由David Axmark,Allan Larsson和Micheal Monty Widenius创建,并于1994年开始开发。第一个版本于1995年5月23日发布。MySQL是中的”My“取自联合创始人Monty Widenius女儿的名字。MySQL海豚标志–Sakila是从用户在“Name the Dolphin”比赛中的大量提议中选出的。
MySQL服务器适用于任务关键型,重载生产系统以及嵌入大规模部署的软件。它被认为是LAMP栈(Linux,Apache,MySQL和PHP)的核心组件。MySQL数据库适用于Linux,Windows,MAC,BSD UNIX等各种操作系统平台。*,Facebook和YouTube等热门网站使用MySQL。
MySQL现在是Oracle公司以及其附属公司拥有的商标,并且是双重许可。用户可以选择GNU许可作为开源软件使用,甚至可以购买有Oracle许可证的商业软件。

1.2.1.MySQL体系结构
MySQL服务器基于分层架构,由主要子系统和支持组件组成,它们通过相互交互来读取,解析和执行查询以返回结果。
MySQL的五种主要子系统是:
查询引擎
存储管理器
缓冲管理器
事务管理器
恢复管理器
查询引擎:它包含三个主要的相关组件 - 语法分析器,查询优化器和执行组件。语法分析器以一种MySQL引擎能够理解的形式分解从调用程序接收到的SQL命令。“查询优化器”简化执行组件使用的语法,然后为查询执行准备最有效的计划。执行组件根据它接收的信息解释执行计划,并向其他组件提出请求以检索记录。
存储管理器:与操作系统连接,以用户表,索引和日志以及内部系统数据的形式将数据写入磁盘。
查询缓存: MySQL引擎使用查询缓存–极其高效的结果集缓存机制,这极大地减少了查询的响应时间,这些查询被调用当检索与先前查询相同的数据。
缓冲区管理器:处理查询引擎和存储管理器对数据请求之间的所有内存管理问题。MySQL使用内存来缓存可以返回的结果集,并且缓存被保存在缓冲区管理器中。
事务管理器:这个子系统提供了锁定功能,以确保多个用户以一致的方式访问数据,而不会损坏或破坏数据。

恢复管理器:为了在发生任何类型的数据丢失的情况下进行检索,会保留数据的副本。
MySQL的两个支持组件是:
进程管理
函数库
进程管理器:它执行两个主要功能 – 管理通过网络连接的用户,以及通过多线程,线程锁定和执行线程安全操作同步任务和进程。
函数库:它包含通用的函数,如字符串操作,排序操作和执行特定于操作系统的函数,如内存管理和文件I / O。
1.2.2.MySQL的特点
关系数据库管理系统:
MySQL支持所有功能,这使得它成为一个完整的关系数据库管理系统(RDBMS)。它支持完整的SQL作为查询和更新数据的标准化语言,并且可以管理数据库。
简单而安全:与其他数据库管理系统(DBMS)软件相比,MySQL使用非常简单且具有交互性,并且具有可靠的数据安全层,可为数据提供高效的加密,因此非常安全。
客户机/服务器体系结构:其简单的客户机/服务器体系结构可帮助终端用户创建一个与许多客户机连接的服务器,以便与服务器进行通信进行插入,更新和管理数据库。
可伸缩性: MySQL可以处理大量数据而不会出现任何卡顿 – 多达5000万行。它可以处理高达8TB的数据而没有任何问题。
跨平台:与几乎所有操作系统兼容,如UNIX,Windows,Linux,MAC OS X等。
高性能,灵活且高效的生产力:
MySQL提供更快速,高度可靠,便宜的存储解决方案,并支持大量嵌入式应用程序。它利用触发器,程序和视图来提高生产力。

1.3.MariaDB
MariaDB是MySQL的分支版本。它主要是由于MySQL在被Oracle公司收购时出现的问题而开发的。MariaDB是一个通用的数据库管理系统(DBMS),它具有可扩展的架构,可通过可插拔存储引擎支持大量的用例。它使用不同的存储引擎来支持不同的用例。
MariaDB是一款开源的多线程关系数据库管理系统,在GNU公共许可证(GPL)下发布。其首席开发人员是Michael Monty Widenius,他也是MySQL AB的创始人之一。作为数据库系统,许多功能有助于MariaDB的普及。其速度是其最显着的特点之一。MariaDB也具有很强的可扩展性,能够处理数万张表和数十亿行数据。它还可以快速平稳地管理少量数据,方便小型企业或个人项目。另一个与前任不同的特点是专注于安全。MariaDB的内置功能包括操作和格式化文本,业务和统计计算,记录时间顺序信息,
MariaDB服务器是世界上最流行的开源数据库之一。它在Debian和Ubuntu中可用,现在是Arch Linux,Manjaro,openSUSE,Red Hat Enterprise Linux,CentOS,Fedora和SUSE Linux Enterprise的默认数据库。作为世界上最广泛采用和广泛部署的产品之一,MariaDB服务器收到阿里巴巴,Facebook和谷歌等公司的捐款。最近,微软还联手支持MariaDB社区。

1.3.1.MariaDB的特点
MariaDB可用于GPL,LGPL和BSD。
它包括广泛的存储引擎选择,包括高性能存储引擎,用于与其他关系数据库管理系统(RDBMS)数据源一起工作。
它使用标准和流行的查询语言。
MariaDB在许多操作系统上运行,并支持各种编程语言。
它提供对PHP的支持,PHP是最流行的Web开发语言之一。
它提供Galera群集技术。
MariaDB还提供了很多在MySQL中不可用的操作和命令,并消除/取代了对性能产生负面影响的功能。
其他功能还包括多源复制,融合IO优化,表发现和联机更改表。

1.3.2.MariaDB和MySQL的比较分析
MariaDB拥有大量新功能,这使得它在性能和用户导向方面更加出色。让我们来评估MariaDB和MySQL,以确定哪一个更好。这种选择最终将取决于IT经理以及他们对开源数据库的熟悉程度。
MySQL和MariaDB之间的一些重要差异:
1、数据库的使用情况:自1995年以来,MySQL一直被视为迄今为止实施最为广泛且最广泛使用的开源数据库。许多像Twitter,YouTube,Netflix和PayPal这样的IT巨头,以及美国国家航空航天局,美国国防部队和沃尔玛都利用这个数据库。
最近才到来的MariaDB也在各种IT巨头组织(如Google,Red Hat,CentOS和Fedora)中作为后端软件因此得到了强大的基础。
2、数据库和索引的结构: MySQL是一个纯粹的关系数据库,集成了一个ANSI标准的信息模式,由表,列,视图,过程,触发器,游标等组成。MySQL的结构化查询语言(SQL)是ANSI SQL 99。
而MariaDB是MySQL的一个分支,因此具有相同的数据库结构和索引。该功能使MariaDB成为希望直接切换或升级后端的用户的理想选择,而无需升级数据库和数据结构。
当从MySQL升级到MariaDB时,所有内容(从数据,表格定义,结构和API)都保持一致。
3、二进制和实现: MySQL是使用C和C ++开发的,并且完全兼容几乎所有操作系统,如Microsoft Windows,MAC OS X,Linux,FreeBSD,UNIX,NetBSD,Novell Netware和其他许多操作系统。
MariaDB使用C,C ++,Bash和Perl开发。它与Microsoft Windows,Linux,MAC OS X,FreeBSD,Solaris等各种操作系统兼容。
4、复制和集群: MySQL通过主从主复制和主从复制提供强大的复制和集群,并利用Galera集群实现多主集群。
MariaDB为主终端用户提供与主从主复制和主从复制相同的复制和集群功能。它还使用10.1版以后的Galera Cluster。
5、对数据库的支持:通过Oracle全天候提供MySQL技术支持服务,支持团队由专业开发人员和工程师组成,他们提供各种工具,如错误修复,修补程序和版本发布。Oracle根据用户的需求提供MySQL首要支持,扩展支持和持续支持。
MariaDB通过开源社区,在线论坛甚至通过专家为用户提供强有力的支持。MariaDB通过企业订阅提供24小时全天候支持,尤其适用于任务关键型生产系统。
6、安全性:就安全性而言,MySQL为表空间数据提供了强大的加密机制。它提供了强大的安全参数,包括选择好的密码,不给用户不必要的特权,并通过防止SQL注入和数据损坏来确保应用程序安全。
MariaDB在内部安全和密码检查,验证模块(PAM)和轻量级目录访问协议(LDAP)认证,Kerberos,用户角色以及对表空间,表格和日志的强大加密等安全功能方面取得了重大进展。
7、可扩展性:支持可扩展系统的数据库可以用许多不同的方式进行扩展,如添加新的数据类型,函数,运算符,聚集函数,索引方法和过程语言。MySQL不支持可扩展性。
MariaDB建立在现代架构的基础之上,可以在每一层 – 客户端,集群,内核和存储上进行扩展。这种可扩展性提供了两个主要优势。它允许通过插件实现持续的社区创新,这意味着可以通过MariaDB的可扩展架构集成各种存储引擎,如MariaDB ColumnStore或Facebook的MyRocks。此外,它使客户能够轻松配置MariaDB以支持从联机事务处理(OLTP)到联机分析处理(OLAP)的各种用例。
8、JSON支持: MySQL支持本地JSON数据类型,可以在JSON(JavaScript Object Notation)文档中高效地访问数据。与将JSON格式的字符串存储在字符串列中相比,JSON数据类型提供了以下优点:
自动验证存储在JSON列中的JSON文档。无效的文档会产生错误。
9、优化的存储格式:存储在JSON列中的JSON文档被转换为允许快速读取文档元素的内部格式。当服务器稍后必须读取以这种二进制格式存储的JSON值时,不需要从文本表示中解析该值。二进制格式的结构使服务器能够直接通过键或数组索引查找子对象或嵌套值,而无需读取文档中的所有值。
另一方面,MariaDB Server 10.2引入了一整套用于读写JSON文档的24个函数。另外,JSON_VALID函数可以与校验约束一起使用,而像JSON_VALUE这样的函数可以与动态列一起使用来索引特定的字段。
10、授权许可: MySQL在GPL下以开放源代码提供代码,并以MySQL Enterprise形式提供非GPL商业分发选项。
MariaDB只能使用GPL,因为它的工作源于该许可条款下的MySQL源代码。
11、性能: MariaDB通过MySQL的许多创新实现了同类最佳性能。其中包括线程池管理以最大限度地提高处理效率,以及InnoDB数据存储区内的碎片整理等广泛的优化功能。因此,当从InnoDB表中删除行时,可用空间立即可供操作系统使用。不需要将旧表中的数据复制到新表中,并且表空间中没有空闲。MariaDB还提供与引擎无关的表统计信息,以改善优化程序的性能,加快对表的大小和结构进行查询处理和数据分析。
如果没有这些增强功能,MySQL的性能就会下降。MySQL中的线程利用率是次优的,InnoDB表随着时间的推移变得碎片化,从而影响性能。

1.4.MariaDB与MySQL
以下几点突出了MariaDB的优缺点。
1.4.1.优点
MariaDB针对性能进行了优化,对于大型数据集,它比MySQL强大得多。从其他数据库系统可以优雅的迁移到MariaDB是另一个好处。
从MySQL切换到MariaDB相对容易,这对于系统管理员来说好像是一块蛋糕。
MariaDB通过引入微秒级精度和扩展用户统计数据提供更好的监控。
MariaDB增强了KILL命令,使您可以杀死用户的所有查询(KILL USER 用户名)或杀死查询ID(KILL QUERY ID query_id)。MariaDB也转而使用Perl兼容的正则表达式(PCRE),它提供比标准MySQL正则表达式支持更强大和更精确的查询。
MariaDB为与磁盘访问,连接操作,子查询,派生表和视图,执行控制甚至解释语句相关的查询应用了许多查询优化。
MariaDB纯粹是开源的,而不是MySQL使用的双重授权模式。一些仅适用于MySQL
Enterprise客户的插件在MariaDB中具有等效的开源实现。
与MySQL相比,MariaDB支持更多的引擎(SphinxSE,Aria,FederatedX,TokuDB,Spider,ScaleDB等)。
MariaDB提供了一个用于商业用途的集群数据库,它也支持多主复制。任何人都可以*使用它,并且不需要依赖MySQLEnterprise系统。
1.4.2.缺点
从版本5.5.36开始,MariaDB无法迁移回MySQL。
对于MariaDB的新版本,相应的库(用于Debian)不会及时部署,由于依赖关系,这将导致必需升级到较新的版本。
MariaDB的群集版本不是很稳定。

1.5.MySQL各版本的比较:
mysql5.7 : 2015年发布,mysql5.7查询性能得以大幅提升,比 MySQL 5.6 提升 1 倍降低了建立数据库连接的时间。
mysql5.6 : 2013年2月发布,mysql5.6版本其中InnoDB可以限制大量表打开的时候内存占用过多的问题InnoDB性能加强。如大内存优化等InnoDB死锁信息可以记录到 error 日志,方便分析InnoDB提供全文索引能力。
mysql5.5 : 2010年12月发布mysql5.5版本默认存储引擎更改为InnoDB 多个回滚段(Multiple Rollback Segments),之前的innodb版本最大能处理1023个并发处理操作,现在mysql5.5可以处理高达128K的并发事物 改善事务处理中的元数据锁定。例如,事物中一个语句需要锁一个表,会在事物结束时释放这个表,而不是像以前在语句结束时释放表。 增加了INFORMATION_SCHEMA[ˈski:mə]]表,新的表提供了与InnoDB压缩和事务处理锁定有关的具体信息。
mysql5.1 : 20o8年发布的MySQL 5.1 的版本,基本上就是一个增加了崩溃恢复功能的MyISAM,使用表级锁,但可以做到读写不冲突,即在进行任何类型的更新操作的同时都可以进行读操作,但多个写操作不能并发。
mysql-5.0 : mysql-5.0版本之前,myisam默认支持的表大小为4G。从mysql-5.0以后,myisam默认支持256T的表单数据。myisam只缓存索引数据。 2005年的5.0版本又添加了存储过程、服务端游标、触发器、查询优化以及分布式事务功能。
mysql-4.1 : 2002年发布的4.0 Beta版,至此MySQL终于蜕变成一个成熟的关系型数据库系统。 2002年mysql4.1版本增加了子查询的支持,字符集增加UTF-8,GROUP BY语句增加了ROLLUP,MySQL.user表采用了更好的加密算法。支持每个innodb引擎的表单独放到一个表空间里。innodb通过使用MVCC(多版本并发控制)来获取高并发性,并且实现sql标准的4种隔离级别,同时使用一种被称成next-key locking的策略来避免幻读(phantom)现象。除此之外innodb引擎还提供了插入缓存(insert buffer)、二次写(double write)、自适应哈西索引(adaptive hash index)、预读(read ahead)等高性能技术。

具体而言选用哪个MySQL版本, 需要根据实际应用来确定,这里推荐大家参考以下MySQL数据库GA版本选择的流程,如下所述:
1、分析本企业业务是否需要使用到MySQL的那些基本功能和特性,特性重点研究方向为:MySQL复制、分区表、Plugin-innodb等。
2、MySQL数据库产品线第一个GA版本推出时间,至少要超过10个月,再考虑使用到生产环境中去。
3、MySQL数据库产品线的最新GA版本,一般不要作为首选目标,可考虑比最新版本晚3~4个版本的GA版本数据库。
4、仔细阅读目标数据库GA版本的信息,若是在之前的版本的基础上修改了大量的BUG,则此GA版本慎重选择。
5、仔细阅读目标数据库GA版本之后的第一个版本的信息,若是修改的BUG信息量非常大,请直接放弃目标版本,向前推进一个版本号作为目标版本。
6、按照第四、第五步骤所描述的办法来选择,直到选定的版本之后的一个版本,BUG修改量不大,严重BUG极少,并且不是最新的GA版本
7、详细阅读选定的数据库GA版本之后2~3个版本的BUG修复信息,主要是跟目标GA版本相关的,并且想办法重现,以及寻找规避的办法。
8、对经过上述七个步骤挑选的GA版本,结合企业业务可能需要用的功能,都必须进行功能测试和性能测试。
9、挑选的数据库GA版本,作为内部开发测试数据库环境,通常要试运行大概3-6个月的时间。
10、企业非核心业务可以考虑采用新的GA版本。
11、经过上述10个工序之后,若是没有重要的功能BUG或性能瓶颈,则可以开始考虑作为所有的业务数据服务的后端数据库。

上一篇:StarRocks-2.0.1集群安装手册


下一篇:【蓝桥杯c++每日练习】每日刷题day8:乘积尾零,快速排序