深入MySQL(一):MySQL的组织架构
今天开始将自己所学过的MySQL的知识都尝试融会贯通,并且用写博客的方式记录分享下来。
今天讲的主题是MySQL的组织架构,对于学习一个中间件或者开源项目而言,我觉得最重要的便是先知晓其组织架构,以一个全局的姿态去观察架构之后,再有选择性的深入到细节,才能够学的快且有收获。
MySQL的架构图

根据图可以观察到,MySQL主要是分为Server层与存储引擎层两大块;而客户端的含义非常广泛,理论上只要可以连接到MySQL,就能够算上是一个客户端;我们主要讨论MySQL架构中的Server层与存储引擎层。
Server层
Server层可以看做是将MySQL的共性操作,也就是所有跨存储引擎的操作都放到了这一层进行实现,比如查询、解析、优化、缓存以及所有的内置函数、存储过程、视图、触发器。
连接器的作用主要是判断用户是否可以利用某个账号登录MySQL,其中比较有意思的一点是一旦利用某个账号登录上去MySQL之后,它本次连接的权限便固定了,如果要让修改权限操作生效,那么便需要将本次连接重新连接,这样才会是新的权限。
查询缓存的作用是便是缓存一些热点查询的结果集,然后直接返回。它有很多很多的缺陷,它的实现是利用一个哈希表,将SQL语句的hash对应结果集。
查询缓存的缺陷很明显,主要为两个地方:
- 映射的Key是SQL语句的hash值,只要与key的查询有任何不一致的地方,都会查询缓存失败。
- 一旦进行更新,会直接清空缓存表。
这个功能太过于鸡肋,所以直接在8.0中去除,后续也不会再提及。
解析器的作用是解析SQL语句,利用词法分析、语法分析检查SQL语句是否存在语法错误的情况。
优化器的作用便是对SQL语句进行优化,比如索引的选取,连接的顺序等,具体的如何优化在后续的篇章里会介绍;
执行器的作用是生成执行计划,然后调用存储引擎的接口,进行数据的操作。
以上便是Server层的大致内容,总的来说,Server层便是由连接、解析、优化、执行四个部分组成,MySQL的架构将解析与获取数据拆开,也为后续的一些特性的实现提供了基础。
存储引擎层
存储引擎层的操作主要负责的是数据的存储与读取,不同的存储引擎有不同的特性,现在应用最多的存储引擎是Innodb,现在已经是MySQL的默认存储引擎;而在早起的版本中,MySQL的默认存储引擎为MyISAM,后期我们也会有关于这两个存储引擎的比较。
我们所熟知的事务、行锁、多版本并发控制、事务日志都是由存储引擎层实现的,而上述的这些内容,Innodb存储引擎是都支持的,所以MySQL官方后续将其设立为了默认引擎。
存储引擎它底层由数十个底层函数,而Server层是执行器利用组合这些函数来达到读取数据的能力,我比较喜欢把这个过程称为“乐高积木”。
总结
MySQL的基础架构为其后续的细节实现提供了基础,Server层的内容我们后续比较重要的内容是优化器如何进行优化;存储引擎层的内容,我们主要学习Innodb的特性以及在某些条件下,使用其他存储引擎的便利性。
MySQL的成功,与其基础架构具有很大的关联性,在Oracle霸占市场的年代,凭借复制所扩展出来的横向扩展功能让其在数据库市场下独占一角;后续又通过Innodb的出现,优化补充了很多老版本所出现的问题。所以希望各位读者能够根据自己之前的所学,结合这篇文章,对于MySQL的基础架构能够有新的认识。
深入MySQL(一):MySQL的组织架构的更多相关文章
- MySQL性能调优与架构设计——第 16 章 MySQL Cluster
第 16 章 MySQL Cluster 前言: MySQL Cluster 是一个基于 NDB Cluster 存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等 ...
- MySQL性能调优与架构设计——第 15 章 可扩展性设计之Cache与Search的利用
第 15 章 可扩展性设计之Cache与Search的利用 前言: 前面章节部分所分析的可扩展架构方案,基本上都是围绕在数据库自身来进行的,这样是否会使我们在寻求扩展性之路的思维受到“禁锢”,无法更为 ...
- MySQL性能调优与架构设计——第 14 章 可扩展性设计之数据切分
第 14 章 可扩展性设计之数据切分 前言 通过 MySQL Replication 功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我 ...
- MySQL性能调优与架构设计——第11章 常用存储引擎优化
第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处. ...
- MySQL性能调优与架构设计——第3章 MySQL存储引擎简介
第3章 MySQL存储引擎简介 3.1 MySQL 存储引擎概述 MyISAM存储引擎是MySQL默认的存储引擎,也是目前MySQL使用最为广泛的存储引擎之一.他的前身就是我们在MySQL发展历程中所 ...
- MySQL InnoDB存储引擎体系架构 —— 索引高级
转载地址:https://mp.weixin.qq.com/s/HNnzAgUtBoDhhJpsA0fjKQ 世界上只两件东西能震撼人们的心灵:一件是我们心中崇高的道德标准:另一件是我们头顶上灿烂的星 ...
- MySQL数据库的优化(下)MySQL数据库的高可用架构方案
MySQL数据库的优化(下)MySQL数据库的高可用架构方案 2011-03-09 08:53 抚琴煮酒 51CTO 字号:T | T 在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQ ...
- MySQL运行原理与基础架构
1.MySQL基础 MySQL是一个开放源代码的关系数据库管理系统.原开发者为瑞典的MySQL AB公司,最早是在2001年MySQL3.23进入到管理员的视野并在之后获得广泛的应用. 2008年My ...
- DRBD+Heartbeat+Mysql高可用读写分离架构
声明:本案例仅为评估测试版本 注意:所有服务器之间必须做好时间同步 架构拓扑 IP信息: Heartbeat安装部署 1.安装heartbeat(主备节点同时安装) [root@master1 ~]# ...
随机推荐
- iframe 去除边框 背景透明等设置 待修改
<iframe name="file_frame" src="UploadFile.jsp" frameborder=no border=0 marg ...
- 异常 finally
经典面试题: 程序执行结果是100: (一):final和finally和finalize的区别
- STM32寄存器深入分析
可能很多刚开始学习STM32的小伙伴都有一个疑惑,创建项目时会需要很多头文件,导致学习过程中很难明白那些头文件的作用,虽然知道头文件都是对寄存器的封装,但是怎么封装的就不知道了.这里我以led灯为试验 ...
- css上下居中
position: absolute; top: 20%; left: 50%; transform: translateX(-50%); -ms-transform: translateX(-50% ...
- leetcode 51. N皇后 及 52.N皇后 II
51. N皇后 问题描述 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后 ...
- MacBookPro2021 M1-MAX电脑问题锦集
MacBook2021 M1-MAXPro电脑问题锦集 问题1: 开启硬盘加密,开机闪屏 问题详述: 在系统偏好设置中,打开安全与隐私,在弹出窗口中切换到第二个页签(文件保险箱),启用文件保险箱功能, ...
- manjaro20安装TIM
安装 yaourt -S deepin-wine-tim 失败 yaourt -S deepin.qq.office 成功,但是tim版本没有待办,版本比较旧. 配置分辨率 https://blog. ...
- 公司内部一次关于kafka消息队列消费积压故障复盘分享
背景现象 1.20晚上8点业务线开始切换LBS相关流量,在之后的1个小时时间内,积压量呈上升趋势,一路到达50W左右,第二天的图没贴出具体是50W数字,以下是第一天晚上的贴图部分. 现象一: 现象二: ...
- 返回void-(响应ajax,响应json格式)(了解)
将jquery库文件加入到idea中 引入json依赖 index.jsp中 设置按钮发起ajax请求 从处理器方法返回void,响应ajax请求 MyController中
- Servlet-整个Servlet类的继承体系