一、整体架构
1.1 层次图(简图)
第一层:连接层
包含了服务于 C/S 程序或者是这些程序所需要的服务,如:连接处理、身份验证、安全性等等。
第二层:核心服务层(SQL Layer)
MySQL的核心部分,在 MySQL 处理底层数据之前的所有工作都是在这一层完成的,包括查询缓存、权限判断、SQL 解析、执行计划优化以及提供所有内置的函数(如日期、时间、数学运算、加密)等等。各个存储引擎提供的功能都集中在这一层,如存储过程、触发器、视图等。
第三层:存储引擎层(Storage Engine Layer)
底层数据存取操作实现部分,由多种存储引擎共同组成。它们负责存储和获取所有存储在 MySQL 中的数据,每个存储引擎都有自己的特点。服务器通过存储引擎 API 与引擎交互,这个 API 接口隐藏了各个存储引擎不同的地方,将各个引擎的功能进行统一封装,同时对查询层尽可能的透明。存储引擎不解析 SQL,互相之间也不能通信。仅仅是简单的响应服务器的请求。
第四层:数据存储层
主要是将数据存储在运行于设备的文件系统之上,并完成与存储引擎的交互。
1.2 架构图(完整结构图)
1. Connectors
不同语言中与 MySQL 服务端进行交互的客户端,如 php、java、python 等。各种语言有自己的实现。
2. Management Serveices & Utilities:
各类系统管理和控制工具,如配置相关服务、集群相关服务、数据迁移工具、备份及恢复工具、服务端资源管理工具、通用日志模块等。
3. Connection Pool
管理服务端的连接、会话、线程等需要缓存的重型资源。连接池负责监听对 MySQL 服务端的各种请求,每当接收到连接请求,会进行身份验证、连接安全检查。如验证通过,便将其转发到线程管理模块。线程管理模块会为每一个连接请求分配(或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责 MySQL 服务端与客户端的通信、接受客户端的命令请求、传递服务端的结果信息等。线程管理模块还要负责管理维护这些连接线程,包括线程的创建、线程的缓存等。
4. SQL Interface
执行器,接收客户端的 SQL,并且返回需要查询的结果。提供包括执行 DDL、DML、存储过程、视图、触发器之类的功能。
5. Parser
SQL 传递到解析器的时候会被解析器验证和解析。
主要功能: a. 将 SQL 语句进行词法、语法、语义分析,分解成语法树,然后按照不同的操作类型进行分发,以后SQL语句的传递和处理就是基于这个结构的。 b. 如果在解析中遇到错误,中断流程并返回错误信息
6. Optimizer
SQL 语句在查询之前会使用查询优化器对查询进行优化。结合客户端请求的 SQL 语句和数据库的统计信息,分析得出一个最优的执行计划,告诉后面的流程如何取得这个 SQL 语句的结果。
7. Cache & Buffer
查询缓存:将客户端提交给 MySQL 的 Select 请求的返回结果集缓存到内存中,与该请求的 hash 值做映射。该请求的数据来源表发生任何数据变化后, MySQL 会自动使该请求的的查询缓存失效。在读多写少时,查询缓存对性能的提高是非常显著的,当然内存消耗也很大。如果查询缓存有命中的查询结果,会直接中断流程返回给客户端,节省大量时间。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,字段缓存,权限缓存等。
8. 存储引擎接口
封装各类存储引擎,将数据处理的特殊实现封装为统一的接口对查询层开放,也提供