1. Mysql体系架构
MySQL体系架构如下图所示:
MySQL的架构自顶向下可以分为四大部分:客户端连接器、数据库服务层、存储引擎层、文件系统和日志层。
(1) 客户端连接器
顾名思义,客户端连接器的主要作用是在MySQL客户端与MySQL服务端建立连接,用来接收和认证来自MySQL客户端的连接请求。
有的资料说,客户端连接器指的就是数据库驱动,我个人认为,客户端连接器的概念应该更靠近服务侧,但也可以认为包含了客户端中不同语言实现的数据库驱动的内容。
(2) 数据库服务层
数据库服务层是整个数据库服务器的核心,又可以细分为连接池、系统管理和控制工具、SQL接口、解析器、查询优化器和缓存等部分。
1) 连接池
连接池用来存储和管理客户端与数据库的连接信息,连接池里存放了多个线程,具体数量可以由配置参数来决定,每个线程负责管理一个客户端到数据库的连接信息。
2) 系统管理和控制工具
提供数据库系统的管理和控制功能,例如对数据库中的数据进行备份和恢复,保证整个数据库的安全性,提供安全管理,对整个数据库的集群进行协调和管理等。
3) SQL接口
SQL接口就是用来接收客户端发送过来的各种SQL命令,如DML、DDL和存储过程等,并将SQL命令发送到其他部分,并接收其他部分返回的结果数据,将结果数据返回给客户端。
4) 解析器
解析器的作用是将SQL转化为一棵抽象语法树(AST),将SQL中的各个部分解析成AST中的节点,然后进行语法校验或其他操作。解析器一般会用到设计模式中的访问者模式来实现。
5) 查询优化器
如果一个SQL通过了解析器的语法检查,就会由查询优化器对其进行逻辑优化和物理优化,最终将其转化为执行计划,然后与存储引擎进行交互,再通过存储引擎与底层的数据文件进行交互。
6) 缓存
缓存的作用就是为了提高数据库的查询能力,由一系列的小缓存组成,比如表缓存、记录缓存、权限缓存,引擎缓存等。
(3) 存储引擎层
MySQL中的存储引擎层主要负责数据的写入和读取,与底层的文件进行交互,它决定了表的存储类型以及表在计算机上的存储方式。MySQL中最常见的存储引擎有:InnoDB、MyISAM 和 MEMORY,关于它们的详细介绍可以看这里和这里。
简单总结一下这三种存储引擎的优缺点:
-
InnoDB是MySQL默认的存储引擎,它提供了事务管理、回滚、崩溃修复能力和多版本并发控制的能力,并提供外键约束。然而缺点是读写效率较差,占用的数据空间较大。
-
MyISAM是老版本MySQL默认的存储引擎,它的优势在于占用空间小,处理速度快,但是不支持事务的完整性和并发性。
-
MEMORY将数据全部放在内存中,因此它的数据查询和处理效率很高,但是会占用大量内存,并且是一次性的数据。
(4) 文件系统和日志层
文件系统和日志层主要包括MySQL中存储数据的底层文件,与上层的存储引擎进行交互,是文件的物理存储层。其存储的文件主要有:配置文件、数据文件、日志文件、MySQL的pid进程文件和socket套接字文件等。
参考引用
一文看懂MySQL体系架构:www.cnblogs.com/OrcinusOrca…
MySQL存储引擎:www.cnblogs.com/luzhanshi/p…
MySQL常见的三种存储引擎:www.cnblogs.com/yuxiuyan/p/…
MySQL面试题大全:blog.csdn.net/qq_35620342…