前言
一直想把这些年自己的学习总结分享出来,却一直不知道从哪里入手,辗转反思,决定还是从mysql入手。
MySQL的逻辑架构
了解mysql的逻辑架构图能够帮助我们更加清晰的了解mysql各个组件之间如何协同工作,同时也帮助我们增加深入的理解mysql 服务器。
-
连接层
连接层只的客户端和一些连接服务,包括socket通信和大多数的基于客户端的或者服务端的类似TCP/IP的通信层。主要完成类似一些连接处理、授权、以及一些安全的相关方案。 -
服务层
服务层主要完成了mysql服务的大多数的核心的功能,- SQL Interface : sql接口实现了DML (select update delete),DDL(CREATE 、DROP、TRUNCATE) ,存储过程,视图、触发器等 一些功能
- Parser :词法分析跟语法分析; Mysql 会解析查询,并创建内部的数据结构(解析树),Parser 就是为了解析SQL在内部形成自己的语法树,并进行一些校验。Parser 利用了C/C++ 实现的开源的yacc/lex 组合,也就是GUN bison/flex 来组合进行语法解析(SQL input -> lex. scanner -> parser -> AST (SELECT_LEX, Items etc) -> executor)
- Optimizer: 优化器,主要是对SQL语句进行优化:选择合适的索引,决定表之间的连接顺序
- Cache & Buffer : 缓存的设计和实现:针对select语句 ,在解析查询前,服务器会检查查询缓存,如果能够在其中找到对应的查询,服务器就不再执行查询解析->优化->执行的过程,而是直接返回查询缓存中的结果. 注:生产环境中不建议使用查询缓存,并且在最新的mysql8.0中整个mysql的查询缓存模块都删除掉了。
- executor 执行器 判断表是否有查询权限, 调用存储引擎接口进行查询或者其他的操作,将结果返回给客户端
-
引擎层
存储引擎层,负责了mysql的数据的存储和提取,服务器通过API于存储引擎之间进行通信,不同的存储引擎局用不同的功能.
常用的引擎主要是myisam & InnoDB,我们先简单的对比一下这两种引擎的区别
-
存储层
数据存储层主要是将数据存储运行在文件系统上,存储层与存储引擎进行交互。架构的设计思想非常优秀,将存储层,跟数据计算层可以分开。