mysql 转型_MySQL的未来在哪?

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

6ab58660c073

MySQL的过去

对于MySQL而言,其最大的发展变化就是被Sun收购,但是Sun原本就有数据库团队,MySQL被收购之后两个团队也合并了起来。MySQL的团队懂得社区并且有激情,而Sun的团队懂得怎样软件工程化,懂得保证质量和产品迭代,因此团队合并之后对于MySQL的改变很大。在这之后Sun被Oracle收购,这又是另外一个转折点,Oracle不仅给了MySQL团队很大自由,也投入了很多人力和物力。这也保证了2013、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可能会同时支持事务性处理也会同时支持在线分析。在线分析和数据仓库不同,因为数据已经在手里了,可以用同一份数据做更多的分析。对于用户而言,所看到的就是一个数据库,但是所能够包含的功能确是难以想象的。

云服务器99元拼团购!拉新还可赢现金红包!300万等你瓜分!

马上一键开团赢红包: http://click.aliyun.com/m/1000019899/

本文作者: 桐碧2018

本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongoose换成mysql_如何将MongoDB数据库的数据迁移到MySQL数据库中

FAQ v2.0终于上线了,断断续续忙了有2个多月。这个项目是我实践的第一个全栈的项目,从需求(后期有产品经理介入)到架构,再到设计(有征询设计师的意见)、构建(前端、后台、数据库、服务器部署),也是第一次独立负责一个项目&#xff…

java虚拟机——JVM

JVM:java虚拟机,简称JVM,是运行所有java程序的假想计算机,是java程序的运行环境,是java最具吸引力的特征之一。我们编写的java代码,都运行在JVM之上。 跨平台:任何软件的运行,都必须…

mysql 5.0.37.tar.gz_Linux下MySQL5.0.37安装配置步骤

Linux下安装MySQL5.0.37需要以下面三个包:MySQL-client-community-5.0.37-0.rhel3.i386.rpmMySQL-server-community-5.0.37-0.rhel3.i386.rpmperl-DBI-1.53-2.fc7.i386.rpm(以下步骤需要root权限)1.验证是否已经安装过MySQLrpm -qa|grep MySQL如果发现有安装过,并需要卸载,使用…

JRE和JDK

JRE:是java程序的运行时环境,包含JVM和运行时所需要的核心类库。 JDK:时java程序开发工具包,包含JRE和开发人员使用的工具。 我们想要运行一个已有的java程序,那么只需要安装JRE即可。 我们想要开发一个全新的java程序…

java程序开发步骤

java程序开发步骤 开发环境搭建完毕后,可以开发第一个程序了 java程序开发三个步骤:编写,编译,运行。

thinkphp三级分销小程序源码_山东谷道微信小程序商城源码带后台 公众号平台三级分销系统...

山东谷道微信小程序商城源码带后台 公众号平台三级分销系统那么微信二级分销系统与微信三级分销系统到底有什么区别和联系呢?为什么改了个数字地位就天差地别?1、微信分销模式等级的区别用简洁的话来说,微信的三级分销系统包含了微信的二级分销系统,只…

linux mysql timestamp_MySQL时间类型Timestamp和Datetime 的深入理解

MySQL数据库常用的时间类型有timestamp和datetime,两者主要区别是占用存储空间长度不一致、可存储的时间也有限制,但针对不同版本下,timestamp字段类型的设置需要慎重,因为不注意的可能会被“坑死”。一、TIMESTAMP和DATETIME字段…

sql express 无法启动服务_在Windows2012下安装SQL Server 2005无法启动服务的解决办法...

因为安装了Windows2012操作系统,的确很不错,唯一的遗憾就是不支持Sql Server 2005的安装。找了很多办法,基本上都有缺陷。现在终于找到一种完全正常没有缺陷的办法了,和大家分享一下。1、正常安装任一版本的SQL Server 2005.2、安…

ecs php mysql集成环境_在阿里云 CentOS 服务器(ECS)上搭建 nginx + mysql + php-fpm 环境...

阿里云的云服务器(ECS)可以选择多种操作系统,打算用它运行 Drupal或者 WordPress ,你最好选择 Linux 系统,这篇文章的演示是基于阿里云的 CentOS 操作系统的服务器。我们在上面搭建一个 nginx mysql php-fpm 的环境,这就是常说的…

python处理文件夹_python文件及文件夹操作

1.open()各模式详情r 以只读模式打开,没有write()方法,默认打开方式w 以只写模式打开,文件不存在时会自动创建文件,文件已存在时会清除文件内容并重建文件。这种模式打开的文件没有read()方法。a 以追加模式打…

svn中项目管理中ec_Mac中使用svn进行项目管理

Mac中使用svn进行项目管理,借鉴了http://blog.csdn.net/q199109106q/article/details/8655204以下方案多人亲测可用转载请注明出处:http://blog.csdn.net/yc7369在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境。在Mac环境下,由于Mac自…

10067mysql_MYSQL数据库mysql Non-Transactional Database Only(只支持MyISAM)

《MYSQL数据库mysql Non-Transactional Database Only(只支持MyISAM)》要点:本文介绍了MYSQL数据库mysql Non-Transactional Database Only(只支持MyISAM),希望对您有用。如果有疑问,可以联系我们。MYSQL入门后来在做WordPress,一开始还不知道…

java类的定义的实例_《Java基础知识》Java类的定义及其实例化

类必须先定义才能使用。类是创建对象的模板,创建对象也叫类的实例化。下面通过一个简单的例子来理解Java中类的定义:public classDog {String name;intage;void bark()//汪汪叫{System.out.println("汪汪,不要过来");}voidhungry(){System.out.println(&q…

excel mysql插件_智分析Excel插件

智分析Excel插件官方版是一款好用的自助分析云平台,智分析Excel插件官方版是一款面向业务用户的EXCEL插件工具,智分析Excel插件官方版支持各类云端数据库、本地excel数据导入功能,软件能够将本地数据和线上数据结合起来分析。软件可以帮助办公…

【计算机网络】——习题解析:一个UDP用户数据的数据字段为8192字节,在数据链路层要使用以太网来传输,试问应当划分为几个IP数据报片?说明每一个IP数据报字段长度和片偏移字段的值

【计算机网络】——习题解析:一个UDP用户数据的数据字段为8192字节,在数据链路层要使用以太网来传输,试问应当划分为几个IP数据报片?说明每一个IP数据报字段长度和片偏移字段的值 答:6个数据字段的长度:前5…

网络协议,各层功能,各层协议

一、OSI七层模型 OSI七层协议模型主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数…

fastdfs java token_fastdfs-client-java操作fastdfs

一、在https://github.com/happyfish100/fastdfs-client-java 下载客户端,解压后并执行ant命令,在E:\tools\libs\fastdfs\fastdfs-client-Java-master\src\build下会生成fastdfs_client.jar如图示二、mvn安装fastdfs_client.jar,在cmd中执行命…

idea编辑器中使用@Data注解无效解决办法

使用Data注解可以减少了以前的get和set等方法,但是在idea编辑器中不认识会在使用实体类元素时候找不到(但是运行不会报错) 所以可以添加插件

@Mapper和@Repository的区别

Mapper和Repository的区别 1.相同点 Mapper和Repository都是作用在dao层接口,使得其生成代理对象bean,交给spring 容器管理 对于mybatis来说,都可以不用写mapper.xml文件 2.不同点 Mapper不需要配置扫描地址,可以单独使用&#x…

git本地库(操作具体命令)

在任何盘符下创建本地仓库repository(除git目录下) 在项目目录创建新的本地仓库,并把项目里的所有文件全部添加、提交到本地仓库中去: $ git init #在当前的目录下创建一个新的空的本地仓库 Initialized empty Git repository…