MySQL的将来在哪?

摘要: 阿里云 MySQL&MariaDB 数据库产品结合开源社区,提供了稳定、可靠、便捷、弹性的在线数据库服务,帮助全球企业客户进行数字化转型。MySQL发展经历了一系列变化,从Sun到Oracle,发展也通过了几个阶段。数据库

阿里云 MySQL&MariaDB 数据库产品结合开源社区,提供了稳定、可靠、便捷、弹性的在线数据库服务,帮助全球企业客户进行数字化转型。MySQL发展经历了一系列变化,从Sun到Oracle,发展也通过了几个阶段。MySQL从5.7版本开始走上了代码重构之路,这为MySQL将来10年的发展奠基了坚实基础,而将来MySQL将和云计算碰撞出什么样的火花?本文中,阿里云研究员吕漫漪将为你们分享MySQL的前世此生。编程

图片描述

MySQL的过去
对于MySQL而言,其最大的发展变化就是被Sun收购,可是Sun本来就有数据库团队,MySQL被收购以后两个团队也合并了起来。MySQL的团队懂得社区而且有激情,而Sun的团队懂得怎样软件工程化,懂得保证质量和产品迭代,所以团队合并以后对于MySQL的改变很大。在这以后Sun被Oracle收购,这又是另一个转折点,Oracle不只给了MySQL团队很大自由,也投入了不少人力和物力。这也保证了201三、2015以及2018年,每间隔2年多的时间就能推出一个较为成熟的新版本,而在2018年以后其迭代周期就会迅速变短,由于朝着物联网方向发展,大概每三个月就会迭代一次。安全

近十年中,Oracle作了不少很好的事情,其中有一点事情虽然不多谈到,可是对于以后的发展却极为重要,那就是——代码重构。你们都但愿完善功能,提升性能,可是不多有人作了代码重构。所谓代码重构就是在不改变功能的前提下,改善代码结构,提升可读性和可扩展性。这件事情虽说起来简单,可是作起来难,特别是在进行决策的时候。MySQL5.6版本的时候决定进行代码重构,这是由于,Oracle增长了不少人力进入MySQL项目,可是当时的系统却存在不少Bug,这使得代码维护变得极为困难,使不少人力用于维护旧代码而不是增长新功能。此外,还使新功能的开发周期变得特别长,而且容易发生错误。固然,由于有不少错误,而且代码没有注释和文档,使新人接手项目变得困难。架构

MySQL的现状
所以为了保证长期的市场领先地位,MySQL必需要进行代码重构。在最开始,主要是将解析、优化、查询等步骤进行拆分,方便找到存在问题的模块。此外, 还实现了一些工具,来帮助检测Bug。MySQL5.7中的优化器部分,30%的代码是重写的,而在8.0中解析器的50%都是重写的,可见投入很大。MySQL将编程语言都统一到C++,编译器都使用最新版本,代码规格采用谷歌的,统一了300人的开发团队的代码标准。代码重构这件事情多是对于将来10年的MySQL发展所作的最重要的一件事情。这是由于有了高质量的代码,才可以快速推出新的功能,下降维护成本,使得新人更快上手项目。编程语言

解析器在重构以前的结构就像是一盘意大利面,很是混乱,重构以后就变得极为清晰。当重构完解析器以后发现,之前不少解析器的Bug都消失了,此外,增长复杂语法的效率也获得了极大的提高,节约了大量时间。此外,还作了多核性能提升,这也是硬件的趋势,虽然每一个内核不会更快,可是数目却会增长。在重构以后,读性能提升了三倍,写的性能也有很可观的的提升。函数

MySQL另一个大的改变就是测试方面,现在的用户更多的是企业级用户,他们更多关注于更高的稳定性。对于数据库而言,最重要的永远都是稳定性,功能和性能是其次的。对于测试方法而言,要求对于新的功能,测试代码覆盖率达到95%,全部的开发人员在提交代码的时候都要进行单元测试。在实现新功能的时候,须要开发和测试同时进行,总体测试以后才能将代码推入主干,性能测试,天天都会测试,此外有重大更新推入主干时须要进行完整的性能测试,保证性能不会退化。全部测试都自动化,不须要人为测试。工具

功能上的最大亮点就是在MySQL5.7版本中推出了JSON数据类型。虽然MySQL一直都是关系型数据库,可是发现本身的用户不只仅须要关系型数据库,也须要支持非结构化数据。所以MySQL须要和客户本身成长,所以在5.7版本中加入了JSON数据类型,也推出了不少适于JSON的函数,所以用户能够选择使用相似于MongoDB的Document的API,用户能够将MySQL当作NoSQL来使用,而不用关心底层的原理,并且还实现了NoSQL所没法比拟的功能。性能

MySQL5.7功能中的另一个亮点是“Group Replication”。这仍是由于了除了互联网客户已经广泛地应用MySQL了,还有不少新增客户是企业级客户,他们要求高可靠性。组复制就是提升可靠性的一个功能,支持自动切换和多写,而多写也提高了高可用性,并且支持多写检测。这个功能当前只支持InnoDB,但不少新功能也支持InnoDB。单元测试

MySQL 8.0版本的新功能亮点就是自检表,对于客户而言作好的一点就是就是它支持原子操做的DDL,特别是在云上原子性的DDL发挥了决定的做用,由于不少操做都是自动操做,不可能让人手动修改DDL回滚时发生的错误。这一点对于云数据库而言很是重要。测试

此外,MySQL 8.0版本还提高了Information Scheme的性能。而不管是系统表仍是普通表,都存放在InnoDB里面,所以其处理方式是同样的。对于开发者而言,有了数据自检,增长新的功能就会很是容易。

递归公用表表达式以及窗口函数都是很是复杂的SQL语句,在8.0中加入这两个语句缩短了MySQL和Oracle的差距,这会大幅度地下降数据库开发人员的开发时间。CTE主要用于对于存在层次等级的表中作递归的查询,这一功能在报表中很是经常使用。窗口函数则是用在分析型工做中的,好比分析每一年、每季度的营收等。这些就是在MySQL8.0中新增的针对于数据库开发者的功能,帮助他们提高开发效率。

MySQL的将来
MySQL的将来其实只有一个字,那就是“云”。有预测称“在2020年,83% 的企业负载会转移到云上”,也就是说大部分线下场景会转移到云上,这对于MySQL而言既是一个机会也是一个挑战。MySQL须要在进行内核改动和优化,使其更适合在云上发展。

云上数据库架构存在着明显的转变,最为明显的就是计算层和存储层的分离。计算层不共享,可是存储层会变成共享存储。共享存储会达到云规模,也就是极大规模,可以支持全部用户,这样可以极大地节约资源。而这样的想法已经被PolarDB用到了。而企业级客户须要高可靠性,因此云上数据库须要演变成为能够跨机房的高可靠性,并且须要保证切换的过程当中不丢失任何数据。在云上,很切换过程多操做须要自动化,须要保证AC之间的切换不丢失任何数据。云上数据库与传统数据库不一样的是须要考虑到云上其余的服务,如何将数据库和备份、恢复、审计、安全以及监控等其余服务进行集成。

资源管理也是值得MySQL提高的部分,有些事务对于响应时间要求很高,这样能够优先处理响应时间较高的任务,而下降其余事务的优先级。此外,当内存不够的时候应该如何处理,不能使得服务宕机。能够进行回滚或者下降新的请求,来保证数据库的稳定状态。此外,还有想作的一件事情就是智能生成执行计划。由于一个SQL进来以后,先解析作优化,产生执行计划,这里须要改进的是在执行计划生成的时候须要考虑更多的事情,好比查询的响应要求以及内存限制。对于查询时间和空间的平衡须要客户本身决定。而如今的执行计划是由优化器本身决定的,在将来但愿可以智能地生成执行计划。

回到企业级工做负载,其实MySQL用在互联网业务中是很是多的,可是众所周知互联网业务的查询每每比较简单,而企业级用户的查询至关复杂。MySQL目前对于简单数据库查询的性能很是好,在这一方面作了不少优化,而在复杂查询方面还能够作极多的优化,好比开启多个线程并行执行。同时能够在InnoDB层作更多的并行执行,好比Scan、条件过滤等,所以在复杂查询方面有无限的提高空间。

MySQL目前只用于OLTP,此外目前还以一个发展很快的趋势就是在线分析。将来,MySQL可能会同时支持事务性处理也会同时支持在线分析。在线分析和数据仓库不一样,由于数据已经在手里了,能够用同一份数据作更多的分析。对于用户而言,所看到的就是一个数据库,可是所可以包含的功能确是不可思议的。

相关文章
相关标签/搜索