MySQL的未来在哪?

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

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可能会同时支持事务性处理也会同时支持在线分析。在线分析和数据仓库不同,因为数据已经在手里了,可以用同一份数据做更多的分析。对于用户而言,所看到的就是一个数据库,但是所能够包含的功能确是难以想象的。

 

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

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

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

相关文章

Git 汇总

怎样比较暂存区和HEAD所含文件的变化?适用于,工作区的文件已经添加至暂存区,尚未进行提交,比较暂存区和当前分支的文件的不同,如果添加至暂存区的文件正确的,可以进行提交,推送远程;…

代码写成这样,老板把我开除了| IT 巨能唠

今天聊一聊遇到过的一些神逻辑代码&#xff0c;不一定很全&#xff0c;但真心让小编我自叹不如啊&#xff01;1、耍猴的最佳手段还记得 XX 手机的抢购活动么&#xff0c;抢购按钮的代码类似是这样的&#xff1a;<a href"javasript:alert(抢购结束!)">立即抢购&…

springboot+vue项目如何在linux上部署

在linux上部署项目&#xff0c;是我们实训项目作业的最后一步&#xff0c;此时我们的项目编码测试已经完成&#xff0c;接下来就需要在服务器上部署上线&#xff0c;那么如何部署上线&#xff0c;接下来我会在虚拟机上的CentOS7系统上实现部署&#xff0c; 一.下载JDK 因为我…

如何把暂存区恢复成和HEAD的一样?

使用场景&#xff1a; 本来打算&#xff0c;将暂存区的文件&#xff0c;进行提交本地仓分支当做一个新的版本&#xff0c; 但是发现&#xff0c;现在工作区的对文件的修改更适合作为一个新的版本&#xff0c;提交 至本地仓库的分支上&#xff0c;暂存区的文件需要全部删除&…

ajax respon有数据,Ajax怎么通过response在后台传递数据?(附代码)

这次给大家带来Ajax怎么通过response在后台传递数据&#xff1f;(附代码)&#xff0c;Ajax通过response在后台传递数据的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。这是js代码&#xff1a;var System {getHttpRequest: function(url, callback, o…

离线数据同步神器:DataX,支持几乎所有异构数据源的离线同步到MaxCompute

概述 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台&#xff0c;实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。 DataX本身作为数据同步框架&#xf…

MaxCompute Hash Clustering介绍

背景 在MaxCompute查询中&#xff0c;Join是很常见的场景。例如以下Query&#xff0c;就是一个简单的Inner Join把t1表和t2表通过id连接起来&#xff1a; SELECT t1.a, t2.b FROM t1 JOIN t2 ON t1.id t2.id; Join在MaxCompute内部主要有三种实现方法&#xff1a; Broadca…

上热搜了!“学了Python6个月,竟然找不到工作!”

在编程界&#xff0c;Python是一种神奇的存在。有人认为&#xff0c;只有用Python才能优雅写代码&#xff0c;提高代码效率&#xff1b;但另一部分人恨不能把Python喷成筛子。那么&#xff0c;Python到底有没有用&#xff0c;为什么用Python找不到工作&#xff1f;CSDN小姐姐带…

.net core razor ajax,.NET CORE Razor Pages Ajax 调用 C# 方法

我目前正在制作一个网站来在谷歌地图上显示位置。我从 Airtable.com 数据库中获取了位置地址&#xff0c;那里的一切都运行良好。然而&#xff0c;因为谷歌只允许一定数量的地理编码地址请求&#xff0c;我想将坐标保存在同一个数据库中&#xff0c;所以我只在需要查找新位置(地…

wget连接指定端口_新技能:wget参数有用过吗?

Wget是一个从网络上自动下载文件的工具&#xff0c;支持HTTP、HTTPS、ftp三个最常见的TCP/IP协议下载&#xff0c;并可以使用HTTP代理。“wget”这个名称来源于“world wide web”与“get”的结合。自动下载文件时什么意思&#xff1f;就是指&#xff1a;wget可以在用户退出系统…

Git 工作区恢复暂存区操作总览

如何让工作区的全部文件恢复为和暂存区一样&#xff1f; 应用场景&#xff1a; 在工作区我做了一版文件优化的操作&#xff0c;将工作区优化的文件添加至暂存区&#xff0c;先不进行提交&#xff1b;然后&#xff0c;在工作区又对优化版本进行修改&#xff0c;但是测试效果&…

数据脱敏平台-大数据时代的隐私保护利器

什么是数据脱敏 又称数据漂白、数据去隐私化或数据变形。是对核心业务数据中敏感的信息&#xff0c;进行变形、转换、混淆&#xff0c;使得对业务数据中的身份、组织等隐私敏感信息进行去除或掩盖&#xff0c;以保护数据能被合理、安全地利用。 数据脱敏的重要性 1&#xff09;…

S8赛事落幕,阿里云边缘计算护航虎牙7000万低延时流畅直播

近日&#xff0c;英雄联盟S8全球总决赛落下帷幕&#xff0c;中国战队IG零封FNC夺得冠军。虎牙直播平台对S8赛事进行了实时直播&#xff0c;为网友们献上了一场身临其境的狂欢&#xff0c;值得注意的是&#xff0c;本次赛事直播&#xff0c;虎牙采用阿里云边缘节点服务&#xff…

arp 华为 查看 路由器_华为路由器运行状态查看-路由器

华为路由器运行状态查看为了查看路由器的工作状态&#xff0c;和输入指令是否已经起作用&#xff0c;这时我们就需要用到DISPLAY命令&#xff0c;该命令可以让我们随时了解路由器的各种状态&#xff0c;以便排除故障。华为路由器的display命令可以在某个特殊接口下运行&#xf…

服务器配置再生龙系统,PXE引导再生龙安装步骤

《PXE引导再生龙安装步骤》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《PXE引导再生龙安装步骤(6页珍藏版)》请在人人文库网上搜索。1、PXE引导再生龙安装步骤使用PXE引导再生龙可以方便机房使用再生龙软件&#xff0c;并且可以实现批量无人值守安装我们的Tistone系…

git 随机摘要

重命名 git mv oldFileName newFileName撤销本地仓库和暂存区提交的记录和提交的文件 git reset --hard创建新分支(基于某次提交或者基于某个分支) git checkout -b 分支名 提交id/分支名查看git历史记录 git log 查看git历史记录简约一条 git log --oneline 查看git历史记录简…

数据中台送到家 企业数字化转型“输血”变“造血”

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘丹 责编&#xff5c;阿秃出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;如果有人要问2019年技术圈什么最热&#xff0c;“中台”绝对当仁不让&#xff0c;从观望到试水&#xff0c;很多公司做出了从 0…

虚拟服务器 端口管理,Apache服务配置虚拟主机(基于域名、端口、IP地址)与简单访问权限管理...

虚拟Web主机在同一台物理服务器中运行多个Web站点&#xff0c;其中每一一个站点并不独立占用一台真正的计算机。httpd支持的虚拟主机类型基于域名的虚拟主机基于IP地址的虚拟主机基于端口的虚拟主机构建虚拟主机------基于域名(1)安装bind、httpd服务。(2)进入named服务的主配置…

阿里云发布迁移解决方案,“迁移上云”这件事有专业的人做

近日&#xff0c;阿里云发布了迁移解决方案&#xff0c;旨在为客户提供一站式迁移综合解决方案&#xff0c;将迁移相关的资源统一呈现&#xff0c;帮助客户安全、稳定和高效迁移上云。 解决什么问题&#xff1f; 客户想要上云&#xff0c;需要自己评估整体方案&#xff0c;但…

MYSQL的修改表结构SQL语句

使用sql语句对表结构进行修改 表结构&#xff1a; 案例:表结构 CREATE TABLE login_user (id int(32) NOT NULL AUTO_INCREMENT,name varchar(225) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT 名字,password varchar(26) DEFAULT NULL COMMENT 密码3,…