深入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 ~]# ...
随机推荐
- 10个JS技巧
1.过滤唯一值 Set 对象是es6新引入的,配合扩展运算符[...]一起使用,我们可以用它来过滤数组的唯一值. const array = [1, 1, 2, 3, 5, 5, 1] const u ...
- 腾讯 TKE 厉害了!用 eBPF绕过 conntrack 优化K8s Service,性能提升40%
Kubernetes Service[1] 用于实现集群中业务之间的互相调用和负载均衡,目前社区的实现主要有userspace,iptables和IPVS三种模式.IPVS模式的性能最好,但依然有优化 ...
- 【洛谷】P1067 多项式输出
原题链接:P1067 多项式输出 题目分析:学长推荐的OJ网站 --洛谷,发现挺好用的还可以下载提交出错的数据. 废话就不多说了,这道题属于基础题.提交出错主要是因为一些小细节不到位,这里就不一一赘述 ...
- kafka学习笔记(六)kafka的controller模块
概述 今天我们主要看一下kafka的controller的代码,controller代码是kafka的非常重要的代码,需要我们深入学习.从某种意义上来说,它是kafka最核心的组件,一方面,他要为集群 ...
- 《剑指offer》面试题24. 反转链表
问题描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4-> ...
- XXE题型记录
XXE题型记录 [CSAWQual 2019]Web_Unagi 题解 打开题目,点开upload中的例子发现是上传xml文件 根据about中的提示Flag is located at /flag, ...
- Kubernetes&Docker集群部署
集群环境搭建 搭建kubernetes的集群环境 环境规划 集群类型 kubernetes集群大体上分为两类:一主多从和多主多从. 一主多从:一台Master节点和多台Node节点,搭建简单,但是有单 ...
- [硬件]USB TYPE C引脚定义
- python闭包函数&装饰器
一.函数引用 函数可以被引用 函数可以被赋值给一个变量 def hogwarts(): print("hogwarts") # hogwarts() # 函数调用 print(ho ...
- 不难懂-----redux
一.flux的缺陷 因为dispatcher和Store可以有多个互相管理起来特别麻烦 二.什么是redux 其实redux就是Flux的一种进阶实现.它是一个应用数据流框架,主要作用应用状态的管理 ...