本文已参与掘金创作者训练营第三期「话题写作」赛道,详情查看:掘力计划|创作者训练营第三期正在进行,「写」出个人影响力。
🎈序言
MySQL可以说是我们普通人用的最多的一种关系型数据库了,无论是我们学习还是工作,基本都离不开一句SQL:select * from
,很真实有没有,但是你写了那么多的SQL,你了解MySQL的分层吗?或者说你知道MySQL有分层这东西吗?应该很大一部分的人都是不清楚的,下面我们来看看大厂高频考点。
🎁MySQL的分层架构
MySQL大致分为四层,我画了一个简图,从上往下依次是:连接层、服务层、引擎层和存储层。他们各自分工明确。我们解析来依次来唠唠这些层。
🧧连接层
连接层,顾名思义连接,他最主要的作用肯定是建立客户端与MySQL服务端之间的链接,简单来说就是中间人,牵线的。 他是在最上层是一些客户端和连接服务,包含本地 sock 通信和大多数基于客户端/服务端工具实现的类似于 tcp/ip 的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于 SSL 的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
🎨服务层
服务层就比较重要了,我们来想想,我们写的SQL最终都是要交给SQL的服务器的,那么MySQL作为目前最主流的数据库,每天处理那么多的数据,他能没两把刷子?他需要对你传进来的数据做一点处理和优化,提升速度。 服务层提供各种用户使用的接口,同时提供SQL优化器,对用户传进来的SQL语句进行优化。他有几个常见的组件。
组件名 | 描述 |
---|---|
Management Serveices & Utilities | 系统管理和控制工具 |
SQL Interface | SQL 接口。接受用户的 SQL 命令,并且返回用户需要查询的结果。比如 select from就是调用 SQL Interface |
Parser | 解析器。 SQL 命令传递到解析器的时候会被解析器验证和解析 |
Optimizer | 查询优化器。SQL 语句在查询之前会使用查询优化器对查询进行优化,比如有where 条件时,优化器来决定先投影还是先过滤。 |
Cache 和 Buffer | 查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key 缓存,权限缓存等 |
💎引擎层
说到MySQL的引擎,我们肯定不陌生,最常见的就是InnoDB和MyISAM引擎,隐藏考点:这俩的区别是啥?知道的小伙伴可以去评论区留言,搞一波抽奖好吧,满五个回答以上就抽!
存储引擎层,存储引擎真正的负责了 MySQL 中数据的存储和提取,服务器通过 API 与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。
👑存储层
存储层主要用于数据的存储,我们从上一层中查询出来的数据会被封装到这一层。
📺总结
1.首先客户端发出一个Select操作。
2.连接层接收后给服务层。
3.服务层对你的查询进行一个优化,并把优化结果给引擎层。
4.选择当前数据库的引擎,选完引擎后,引擎将最终的数据交给了存储层。
5.存储层,用存储层来存数据。