Home > Database > Mysql Tutorial > body text

MySQL架构组成之逻辑模块组成_MySQL

WBOY
Release: 2016-06-01 13:14:29
Original
652 people have browsed it

MySQL 可以看成是二层架构
第一层SQL Layer,包括权限判断,sql 解析,执行计划优化,query cache 的处理等等;
第二层存储引擎层(Storage Engine Layer),是底层数据存取操作实现部分,由多种存储引擎共同组成。

SQL Layer 中包含了多个子模块:
1、初始化模块
MySQL Server 启动的时候,对整个系统做各种各样的初始化操作,比如各种buffer,cache 结构的初始化和内存空间的申请,各种系统变量的初始化设定,各种存储引擎的初始化设置,等等。
2、核心API(源码在mysys 和strings文件夹下面)
提供一些需要非常高效的底层操作功能的优化实现,包括各种底层数据结构的实现,特殊算法的实现,字符串处理,数字处理等,小文件I/O,格式化输出,以及最重要的内存管理部分。
3、网络交互模块(源码在vio文件夹下面)
底层网络交互模块抽象出底层网络交互所使用的接口api,实现底层网络数据的接收与发送,以方便其他各个模块调用,以及对这一部分的维护。
4、Client & Server 交互协议模块
任何C/S 结构的软件系统,都肯定会有自己独有的信息交互协议,MySQL 也不例外。MySQL的Client & Server 交互协议模块部分,实现了客户端与MySQL 交互过程中的所有协议。当然这些协议都是建立在现有的OS 和网络协议之上的,如TCP/IP 以及Unix Socket。
5、用户模块
用户模块所实现的功能,主要包括用户的登录连接权限控制和用户的授权管理。
6、访问控制模块
访问控制模块实现的功能就是根据用户模块中各用户的授权信息,以及数据库自身特有的各种约束,来控制用户对数据的访问。用户模块和访问控制模块两者结合起来,组成了MySQL 整个数据库系统的权限安全管理的功能。
7、连接管理、连接线程和线程管理
连接管理模块负责监听对MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理模块。每一个连接上MySQL Server 的客户端请求都会被分配(或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责MySQL Server 与客户端的通信,接受客户端的命令请求,传递Server 端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建,线程的cache 等。
8、Query 解析和转发模块
其主要工作就是将query 语句进行语义和语法的分析,然后按照不同的操作类型进行分
注意:我们习惯将所有Client 端发送给Server 端的命令都称为query
9、Query Cache 模块
将客户端提交给MySQL 的Select 类query 请求的返回结果集cache 到内存中,与该query 的一个hash 值做一个对应。该Query 所取数据的基表发生任何数据的变化之后,MySQL 会自动使该query 的Cache 失效。在读写比例非常高的应用系统中,Query Cache 对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。
10、Query 优化器模块
优化客户端请求的query,根据客户端请求的query 语句,和数据库中的一些统计信息,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何取得这个query 语句的结果。
11、表变更管理模块
表变更管理模块主要是负责完成一些DML 和DDL 的query,如:update,delte,insert,create table,alter table 等语句的处理。
12、表维护模块
表的状态检查,错误修复,以及优化和分析等工作都是表维护模块需要做的事情。
13、系统状态管理模块
系统状态管理模块负责在客户端请求系统状态的时候,将各种状态数据返回给用户,像DBA 常用的各种show status 命令,show variables 命令等,所得到的结果都是由这个模块返回的。
14、表管理器
表管理器的工作主要就是维护*.frm文件,以及一个cache,该cache 中的主要内容是各个表的结构信息。此外它还维护table 级别的锁管理。
15、日志记录模块
日志记录模块主要负责整个系统级别的逻辑层的日志的记录,包括error log,binary log,slow query log 等。
16、复制模块
复制模块又可分为Master 模块和Slave 模块两部分:
Master 模块主要负责在Replication 环境中读取Master 端的binary 日志,以及与Slave 端的I/O 线程交互等工作。
Slave 模块比Master 模块所要做的事情稍多一些,在系统中主要体现在两个线程上面:
一个是负责从Master 请求和接受binary 日志,并写入本地relay log 中的I/O 线程。
一个是负责从relay log 中读取相关日志事件,然后解析成可以在Slave 端正确执行并得到和Master 端完全相同的结果的命令并再交给Slave 执行的SQL 线程。
17、存储引擎接口模块
实现其底层数据存储引擎的插件式管理。它成功地将各种数据处理高度抽象化,形成MySQL可插拔存储引擎的特色。

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!