MySQL的未来在哪?

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 阿里云 MySQL&MariaDB 数据库产品结合开源社区,提供了稳定、可靠、便捷、弹性的在线数据库服务,帮助全球企业客户进行数字化转型。MySQL发展经历了一系列变化,从Sun到Oracle,发展也经过了几个阶段。

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

manyi

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

双11狂欢,云数据库首购低至2折!还能100%中奖,最高1000元无门槛通用代金券,快来参加吧!>>

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
2487 6
|
Java Maven
Maven 依赖管理
Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。
442 5
|
11月前
|
机器学习/深度学习 测试技术 知识图谱
DeepSeek-R1:Incentivizing Reasoning Capability in LLMs via Reinforcement Learning论文解读
DeepSeek团队推出了第一代推理模型DeepSeek-R1-Zero和DeepSeek-R1。DeepSeek-R1-Zero通过大规模强化学习训练,展示了卓越的推理能力,但存在可读性和语言混合问题。为此,团队引入多阶段训练和冷启动数据,推出性能与OpenAI-o1-1217相当的DeepSeek-R1,并开源了多个密集模型。实验表明,DeepSeek-R1在多项任务上表现出色,尤其在编码任务上超越多数模型。未来研究将聚焦提升通用能力和优化提示工程等方向。
783 16
|
监控 安全 算法
室内定位导航技术:数字化时代的智能寻路解决方案
室内定位导航技术融合Wi-Fi、蓝牙信标及超宽带等技术,克服了GPS在室内的局限性。蓝牙信标作为关键组件,通过信号强度分析估算距离,结合三角定位算法确定位置。该技术不仅部署简便、成本低,还能提供准确稳定的定位服务。应用场景包括商场导航、医院科室指引、厂区资产管理、园区安全监控以及智能停车场等,极大提升了用户体验和管理效率。
942 0
室内定位导航技术:数字化时代的智能寻路解决方案
|
机器学习/深度学习 人工智能 自然语言处理
从原理出发 - 提示词如何影响大模型的输出
在探索人工智能的深海中,提示词(Prompt)是引导大模型输出的灯塔。本文希望通过对自身所学所思进行总结,解析提示词如何塑造AI的响应,揭示其背后的机制。
1600 10
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
《深度剖析:人工智能与元宇宙构建的底层技术框架》
在科技飞速发展的当下,人工智能与元宇宙成为备受瞩目的前沿领域。人工智能的底层技术包括机器学习、深度学习和自然语言处理,赋予机器学习能力、图像识别和语言理解功能。元宇宙则依赖区块链、虚拟现实(VR/AR/MR)、数字孪生及高速网络等技术,构建去中心化、沉浸式和交互性强的虚拟世界。两者融合促进内容创作与用户体验提升,预示未来社会和经济发展的新方向。
264 0
|
11月前
|
网络协议 Linux Go
用 Go 基于 epoll 实现一个最小化的IO库
Go 语言社区中存在多个异步网络框架,如 evio、nbio、gnet 和 netpoll 等。这些框架旨在解决标准库 netpoll 的低效问题,如一个连接占用一个 goroutine 导致的资源浪费。easyio 是一个最小化的 IO 框架,核心代码不超过 500 行,仅实现 Linux 下的 epoll 和 TCP 协议。它通过 Worker Pool、Buffer 等优化提高了性能,并提供了简单的事件处理机制。
182 0
|
Oracle Ubuntu Java
cannot execute binary jdk问题
【7月更文挑战第15天】
1057 5
|
JavaScript C++
以 Vue 3 项目为例,你是否经常遇到 import 语句顺序混乱的问题?要想解决它其实很容易!
以 Vue 3 项目为例,你是否经常遇到 import 语句顺序混乱的问题?要想解决它其实很容易!
|
运维 关系型数据库 MySQL
在Linux中,如何使用strace进行故障排查?
在Linux中,如何使用strace进行故障排查?