MySQL的逻辑架构及工作流程是什么

58次阅读
没有评论

共计 3045 个字符,预计需要花费 8 分钟才能阅读完成。

本篇内容主要讲解“MySQL 的逻辑架构及工作流程是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“MySQL 的逻辑架构及工作流程是什么”吧!

MySql 并不完美,但是却足够灵活,能够适应高要求的环境。同时,MySql 既可以嵌入到应用程序中,也可以支持数据仓库、内容索引和部署软件、高可用的冗余系统、在线事务处理系统等各种应用类型。

为了更心如的理解 MySql 服务器,我们需要理解 MySql 各部件之间如何协同工作。需要我们去理解它的逻辑架构。

下面我们就来介绍一下 MySql 的逻辑架构:

MySQL 的逻辑架构

MySQL 的最重要、最与众不同的特性就是它的存储引擎架构,这种架构将查询处理以及其他系统任务和数据的存储 / 提取相分离。

所带来的好处就是可以在使用时根据性能、特性,以及其他需求来选择数据存储的方式。

下图就是 MySQL 的逻辑架构图:

MySQL 架构总共三层,在上图中以虚线作为划分。

首先,最上层的服务并不是 MySQL 独有的,大多数给予网络的客户端 / 服务器的工具或者服务都有类似的架构。比如:连接处理、授权认证、安全等。

第二层的架构包括大多数的 MySQL 的核心服务。包括:查询解析、分析、优化、缓存以及所有的内置函数(例如:日期、时间、数学和加密函数)。同时,所有的跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。

第三层包含了存储引擎。存储引擎负责 MySQL 中数据的存储和提取。服务器通过 API 和存储引擎进行通信。这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明化。存储引擎 API 包含十几个底层函数,用于执行“开始一个事务”等操作。但存储引擎一般不会去解析 SQL(InnoDB 会解析外键定义,因为其本身没有实现该功能),不同存储引擎之间也不会相互通信,而只是简单的响应上层的服务器请求。

更加详细的 MySQL 系统架构图

看完上图后,大家是不是觉得 MySQL 的系统架构挺简单的?其实不然。

上图只是 MySQL 系统架构的大的模块图,其实每一层的结构都相当复杂,下图就是详细模块图:

首先,我们对该图中的各个模块做一简单介绍: 

1、Connectors

指的是不同语言中与 SQL 的交互。

2、Connection Pool

管理缓冲用户连接,线程处理等需要缓存的需求。负责监听对 MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理模块。每一个连接上 MySQL Server 的客户端请求都会被分配(或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责 MySQL Server 与客户端的通信,接受客户端的命令请求,传递 Server 端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建,线程的 cache 等。

3、Management Serveices Utilities

系统管理和控制工具。

4、SQL Interface

接受用户的 SQL 命令,并且返回用户需要查询的结果。

5、Parser

SQL 命令传递到解析器的时候会被解析器验证和解析。解析器是由 Lex 和 YACC 实现的,是一个很长的脚本。在 MySQL 中我们习惯将所有 Client 端发送给 Server 端的命令都称为 query,在 MySQL Server 里面,连接线程接收到客户端的一个 Query 后,会直接将该 query 传递给专门负责将各种 Query 进行分类然后转发给各个对应的处理模块。 

主要功能:

a、将 SQL 语句进行语义和语法的分析,分解成数据结构,然后按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤,以后 SQL 语句的传递和处理就是基于这个结构的;

b、如果在分解构成中遇到错误,那么就说明这个 sql 语句是不合理的。

6、Optimizer

查询优化器:SQL 语句在查询之前会使用查询优化器对查询进行优化。就是优化客户端请求 query,根据客户端请求的 query 语句,和数据库中的一些统计信息,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何取得这个 query 语句的结果。

使用的是“选取 - 投影 - 联接”策略进行查询:

用一个例子就可以理解:select uid,name from user where gender = 1;

这个 select 查询先根据 where 语句进行选取,而不是先将表全部查询出来以后再进行 gender 过滤;然后根据 uid 和 name 进行属性投影,而不是将属性全部取出以后再进行过滤。最后将这两个查询条件联接起来生成最终查询结果。

7、Cache 和 Buffer

查询缓存:主要功能是将客户端提交 给 MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值 做一个对应。该 query 所取数据的基表发生任何数据的变化之后,MySQL 会自动使该 query 的 Cache 失效。在读写比例非常高的应用系统中,Query Cache 对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。

如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key 缓存,权限缓存等。

8、存储引擎接口

MySQL 区别于其他数据库的最重要的特点就是其插件式的表存储引擎。MySQL 插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如 SQL 分析器和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎开发者都可以按照自己的意愿来进行开发。 

注意:存储引擎是基于表的,而不是数据库。

数据库的工作流程

相信通过上述的介绍,大家对 MySQL 的逻辑架构已经有了一定的了解,下面我们下来介绍一下数据库具体的工作流程,先看一张图:

在这里,我从数据库架构的三个层面分别介绍数据库的工作流程: 

最上层:客户端连接

1、连接处理:客户端同数据库服务层建立 TCP 连接,连接管理模块会建立连接,并请求一个连接线程。如果连接池中有空闲的连接线程,则分配给这个连接,如果没有,在没有超过最大连接数的情况下,创建新的连接线程负责这个客户端。

2、授权认证:在真正的操作之前,还需要调用用户模块进行授权检查,来验证用户是否有权限。通过后,方才提供服务,连接线程开始接收并处理来自客户端的 SQL 语句。

第二层:核心服务

1、连接线程接收到 SQL 语句之后,将语句交给 SQL 语句解析模块进行语法分析和语义分析。

2、如果是一个查询语句,则可以先看查询缓存中是否有结果,如果有结果可以直接返回给客户端。

3、如果查询缓存中没有结果,就需要真的查询数据库引擎层了,于是发给 SQL 优化器,进行查询的优化。如果是表变更,则分别交给 insert、update、delete、create、alter 处理模块进行处理。

第三层:数据库引擎层

1、打开表,如果需要的话获取相应的锁。

2、先查询缓存页中有没有相应的数据,如果有则可以直接返回,如果没有就要从磁盘上去读取。

3、当在磁盘中找到相应的数据之后,则会加载到缓存中来,从而使得后面的查询更加高效,由于内存有限,多采用变通的 LRU 表来管理缓存页,保证缓存的都是经常访问的数据。

最后,获取数据后返回给客户端,关闭连接,释放连接线程。

到此,相信大家对“MySQL 的逻辑架构及工作流程是什么”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计3045字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)