你心目中的 MySQL 是什么样的?

 
曾经有整整一个时代,被称为 LAMP,这四个字母代表 Linux+Apache+MySQL+PHP 。这是塑造了整个互联网生态的技术组合,MySQL 是其中不可或缺的一环。
从关系型数据库的功能来讲,MySQL 不是最强大的产品,但是MySQL在很多年中,可以说是开源关系型数据库的唯一选择。


据我所知,你是一个 PostgreSQL的忠实用户,为什么会评价 MySQL 为“唯一选择”?

实际上,我大概在 2001 年左右,就接触过 MySQL,2004 年左右就开始接触 PG,那个时代 MySQL还在 3.x,PG还是7.4 ,早年的 PostgreSQL 对开发型的用户非常不友好。但是 MySQL,对这类用户非常的友善。很多用户没有 Linux 的使用经验,MySQL 有非常容易安装和使用的 Windows 版本;用户需要能够开发小型互联网应用的基本数据库功能,MySQL提供了完美契合的支持,既没有多到让人难以抉择,也没有少到需要投入大量工作去填补。
那个时代有很多昂贵的商用关系型数据库品牌,它们远比当年的 MySQL 更完整,但是对于个人开发者,LAMP 的组合弥足珍贵,是这些开源产品,提供了强大的动力,使得互联网成为一个生机勃勃的世界,无数的个人创作者和创业者,可以仅仅依靠一台电脑,一个廉价的VPS环境,就能够把自己的想法实现出来。很多伟大的企业,都是基于这个自由软件组合提供的生产力。


你认为 MySQL 成功的原因是什么?开源?

开放源码无疑是重要的原因,但是MySQL开发者本身的选择才是最重要的。我有一个观点,就是随着软件行业的发展,各种成熟领域的后来者越来越难胜出,因为先发者在漫长的时间中已经积累了深厚的资源,后来者必须要先做到足够参与竞争,才能谈得上取而代之,而这个启动成本是越来越高的。
早期的 MySQL,不支持外键、不支持存储过程和函数,不支持视图,更谈不上CTE、递归查询和 Window Function。MySQL 的开发者们,选择了一条非常正确的道路,优先做好对于互联网开发者急需的功能,使其成为在主要应用领域足够好的产品。距离我第一次接触 MySQL,20 多年过去了,最新版的 MySQL 终于支持了 Window Function和递归查询。那么这 20年间,MySQL 的开发者们在做什么呢?这些年 MySQL 打造了日趋稳定的前后端分离体系,越来越强大的 InnoDB、Memory 等存储引擎,提供了大量使用的运维工具,精心打磨资源管理,查询优化,权限管理等日常需要的功能。
无论商业授权的软件产品,还是开源项目,开发资源永远不可能是无限的,选择一条正确的发展路线,把有限的资源投入到最正确的方向,需要远大的战略眼光。在我心目中,MySQL团队这二十年来的战略选择可以称作行业典范。


你心目中,MySQL 最出色的技术特色是什么?性能?


从技术角度讲,我认为MySQL最成功的不在于经常被媒体称道的“快速”和“轻量”,而是前后端分离,对于资源非常有限的早期 MySQL,这个选择是非常需要勇气的。但是这奠定了未来几十年间 MySQL 的技术优势。面对层出不穷的各种挑战,独立的存储引擎提供了巨大的竞争力。并且,这个壁垒是竞争对手难以跨越的,它根植于这个软件产品的根本设计思想。


你认为 MySQL 目前面临的最大挑战是什么?PostgreSQL或者 MongoDB 吗?

MySQL 的最大挑战并非某一个竞争产品,而是它自身最成功的领域——互联网应用。
以外键为例,二十多年前,MySQL 并没有外键,但是它仍然在.com时代的互联网行业大获成功。
一方面,今天的MySQL依靠主流的 InnoDB 引擎,早已经支持了外键,另一方面,对于互联网行业,关系型数据库的外键仍是一个非常不常用的功能。这并非MySQL的用户不需要外键约束,而是对于互联网行业,强一致性的外键约束是一个可以容忍的不足。更重要的是,随着数据规模的上涨,数据约束和校验,越来越难通过外键来实现,原本因为功能缺失而需要在应用层实现的数据校验,反而更符合分布式架构的需要。
但是同样的,随着产业规模的发展,越来越多的分布式数据库,和深度改造过的MySQL云产品投入市场,这些分布式数据库和云数据源的冲击,是所有传统的单机关系型数据库都要面临的,作为这个领域的旗帜产品,MySQL也不例外。而经过几十年的发展演化,MySQL的代码体系是否能够支持它面临更多的挑战?这个软件架构能否支持它发展出更多更强大的功能?我们注意到window function和递归查询的开发持续了数年之久,而未来还有很多这样的挑战。


你认为应该如何学习MySQL数据库?

IT业越来越大,对于普通人来说,不必追求成为全才,即使聚焦在MySQL,也一样。
初学者应该尽快打通安装、登录、建立学习环境的路径,对关系型数据库,特别是表、索引、主键这样的基本知识,建立起直观和具体的印象。然后系统的学习一遍查询语法,虽然对于程序员来说,现在应用层的编程语言普遍都有自己的 ORM 工具,但是要用好 ORM,了解其底层的 SQL 语法仍然是非常必要的。
接下来我们可以有几个比较大的方向选择
1. 一个是数据的设计者,这个方向的终极目标是,了解业务,熟练运用MySQL的功能,设计出良好的数据库模型
2. 一个是使用数据库的开发者,这个路线要求熟悉 SQL语言,能够设计和规划对数据库资源的使用,很多团队, 设计者和开发者是同一类人。
3. 现在的互联网企业中,数据分析岗位越来越重要,越来越多的专业数据分析师出现在互联网团队,这些岗位的 MySQL 技能普遍是不足的,应该进一步加强,除了编写SQL查询,也应该掌握一些性能优化和模型设计的知识。
4. 由于云服务的普及,现在DBA并不像上一个时代看起来那么重要,但其实现代互联网企业的数据库越来越复杂和庞大,无论用户企业还是云服务商,DBA,DevOps、架构设计人员的需求是在增加的
5. 最后,MySQL是当今世界最重要的开源软件之一,它需要大量专业开发者的贡献,有大量工作在等待最优秀的开发者。
学习者完全可以从熟悉 MySQL开始,根据自己的需要,选择适合自己的方向深入。


你提到了MySQL是当今最重要的开源软件之一,那么这个重要性体现在哪些方面呢?

曾经,LAMP的组合代表了基于开源软件开发互联网应用的核心技术组合。今天互联网的技术生态固然复杂了很多,但是L和M的仍然占据了举足轻重的位置。特别是与开发者直接相关的MAP中,MySQL是地位最稳固的一个。随着开发技术的发展,越来越多的应用层技术开始流行,从早年革命性的 ROR,再到后来流行一时的 Django,以及在互联网企业广受欢迎的 Spring 技术体系,还有 NodeJS等等,而交互层面,除了智能手机和各种平台的小程序,web页的交互技术也竞争激烈,而 MySQL始终牢牢占据互联网行业的数据库首选产品。
这个重要性不仅仅体现在 MySQL 官方发行版的流行,也体现在各种新兴的数据库产品,经常以兼容 MySQL 协议、语法甚至数据格式作为生存必备。还有层出不穷的兼容 MySQL 的分布式数据库、分布式存储引擎和中间件,这都体现了 MySQL 巨大的影响力。


那么,你认为MySQL在今天如何复兴?

MySQL不需要复兴,它在今天仍然是最成功的开源数据库产品,也是最成功的关系型数据库。MySQL是这个时代的胜利者,不是挑战者。MySQL 的甜蜜苦恼是如何在下一个时代继续成功。例如 MariaDB 的出现,对 MySQL 品牌无疑是一个挑战,但是 MySQL 的这些问题都不影响它的成功。


今天,你会向学习者推荐哪个版本的 MySQL?

当然是最新的发布版,我知道互联网企业还在普遍使用 5.7,甚至还有很多5.6,但是MySQL 8.x 已经发布了很久,8.x 有很多重要的更新。即使一个学习者学会了 8.x 的知识,而工作中使用 5.7,那也只需要做减法。何况在学习的时候,整个行业也是在向前发展的,我们今天学习的新技术,在明天找工作时,也许就成了流行技术。


你怎么看待 MySQL 和其它 NoSQL、NewSQL数据库的关系?这些新兴技术,是否会替代 MySQL?

首先,我一向反对简单粗暴的把非关系型数据库都归类于“NoSQL”或“NewSQL”,在“非关系型数据库”这个庞大的补集中,包含了非常不一样的各种产品,就拿我们比较熟悉的键值数据库和文档数据库来说,通常我们都期待文档数据库具有一定的查询能力,能够支持复杂的数据结构和索引,最好有分布式能力。但是对于键值数据库,我们通常不需要它提供索引和查询,只要能够快速的读写,以及,要能够集群。
同样,这些产品对关系型数据库,并非替代关系,在一个朴素的互联网项目中,我们往往希望围绕关系型数据库建立业务模型,用KV作为高速缓存,可能还会需要基于文档数据库的全文检索引擎等服务。
但是另一方面,关系型数据库自身,也提供了很多重叠的功能。例如 MySQL的Memory 引擎,小数据读写性能远超普通的存储引擎,可以说非常适合作为会话缓存使用。再例如现在 MySQL 也有 JSON 类型,我多年来在 PG 中使用 JSONB 代替文档数据库。而MySQL的用户对 JSON 类型,重视的仍然不够,特别是JSON结合全文检索功能,在小型应用中可能比单独再部署一个文档数据库更好。在一个不断发展的项目中,可能最理想的是先围绕关系型数据库充分发展,然后根据需要补充各种不同功能的产品。
 

Logo

本社区面向用户介绍CSDN开发云部门内部产品使用和产品迭代功能,产品功能迭代和产品建议更透明和便捷

更多推荐