一、前言
作为一个后端的开发每天都要跟数据库打交道,不管你是Java开发、PHP开发还是Python开发,你可以不会其他的语言,但是数据库是都必须掌握的。而MySQL则是很多的公司采用的主流数据库之一。所以了解MySQL的体系结构能够帮助我们更熟练的掌握MySQL,大大提高平时的开发效率。
二、正文
MySQL体系结构图如下(图源网络):
MySQL的结构组件可以分为四层架构,它们分别是:
1)、连接层
连接层是最上面的一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。
主要完成一些类似于链接处理、授权认证、以及相关的安全方案。在该层引入线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
2)、服务层
第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。并且所有跨存储引擎的功能也在服务层实现。在服务层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定表的查询顺序,是否利用索引查询等等,最后再生成相应的执行操作。如果是查询语句,服务器还会查询内部的缓存,如果缓存空间足够,这样在解决大量读操作的环境中能够很多好的提升系统的性能。
3)、引擎层
存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能。MySQL数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。甚至一个库中不同的表使用不同的存储引擎,这些都是允许的。所以我们可以根据实际使用的需求,选择合适的存储引擎。
4)、存储层
数据存储层,主要将数据存储在文件系统之上,并且完成和数据库存储引擎的交互。
由上面的体系结构图可以发现,整个MySQL 体系结构由以下几个部分组成:
- Connectors:连接组件
- Connection Pool:连接池组件
- Management Services & Utilities:管理服务和工具组件
- SQL Interface:SQL接口组件
- Parser:查询分析组件
- Optimizer:优化器组件
- Caches & Buffers:缓冲池组件
- Pluggable Storage Engines:存储引擎
- File System:文件系统
Connectors:不同语言的代码程序和mysql的交互(SQL交互),比如JAVA的jdbc、python、php等等。
Connection Pool:数据库连接池负责管理、缓冲用户的连接,线程处理等需要缓存的需求。
Management Services & Utilities:管理服务和工具组件 系统管理和控制工具,例如备份恢复、Mysql复制、集群等。
SQL Interface:sql接口 接受用户的SQL命令,并且返回用户需要查询的结果。
Parser:查询解析器,SQL命令传递到解析器的时候会被解析器验证和解析(权限、语法结构)。
Optimizer:查询优化器组件,SQL语句在查询之前会使用查询优化器对查询进行优化。
select id,name from user where age = 20; 复制代码
上面的查询语句为以下的查询顺序:
1、先根据where 语句进行选取,而不是先将表全部查询出来以后再进行age过滤
2、根据id和name进行属性投影,而不是将属性全部取出以后再进行过滤
3、将这两个查询条件联接起来生成最终查询结果
Caches & Buffers:缓存池组件。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据
Pluggable Storage Engine:存储引擎组件。MySQL是插入式存储引擎 存储引擎说白了就是如何管理操作数据(存储数据、如何更新、查询数据等)的一种方法。因为在关系数据库
中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)
File System:文件系统包括日志文件,数据文件,配置文件,pid文件,socket文件等。
和其他的数据库相比,MySQL的特殊之处在于它的架构可以在不同的场景中应用并发挥更好的作用。这是因为MySQL的存储引擎是插件式的存储引擎架构,这样能够将查询处理和其他的系统任务以及数据的存储提取分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。对于MySQL存储引擎的详细介绍,我之前在今天我们来说说MySQL的存储引擎 这篇文章中详细写过,有需要的可以参考。
三、结尾
以上就是关于MySQL结构体系的介绍,只有了解了MySQL的结构体系,才能明白MySQL的运行原理,对日常开发和SQL优化具有很好的帮助。后面的内容会详细介绍一下MySQL优化相关的内容。有任何问题可以下方留言或者私信交流讨论。
