mysql逻辑部分_MYSQL的逻辑架构

MySQL与其他数据库有点与众不同,他的架构可以在很多不同场景中发挥不同的作用,但同时也会带来选择上的困难。Mysql并不完美,但是却很灵活,能够适应高要求的应用环境,比如高并发的web应用环境。Mysql既可以嵌入到应用程序中,也可以止支持数据仓库、内容索引和部署软件、高可用冗余系统、在线事物处理系统(OLTP)等各种应用类型。

Mysql最总要、最与众不同的特性是他的存储引擎架构,这种架构的设计将查询处理及其他系统任务和数据存储/提取相分离。这种处理与存储分离的设计可以在使用时根据性能、特性,以及其他需求来选择数据存储的方式。

AAffA0nNPuCLAAAAAElFTkSuQmCC

Mysql逻辑架构

AAffA0nNPuCLAAAAAElFTkSuQmCC

第一层

服务层(为客户端服务):第一层不是Mysql特有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。比如连接管理、授权认证、安全。

1.每个连接的查询都在一个进程中的线程完成。

2.服务器负责缓存线程,所以服务层不需要为每个连接新建线程。

注:mysql5.5或者更新的版本提供了一个API,支持线程池(thread-pooling)插件,可以使用池中少量线程来服务大量的连接。(类似于Oracle中的共享连接方式)

第二层

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

1.优化器不关心使用的是什么存储引擎,但是存储引擎对优化查询有影响。

2.在解析查询之前,服务器会“询问”是否进行了查询缓存(只能缓存SELECT语句和相应结果)。缓存过的直接返回结果,未缓存的就需要进行解析查询,优化,重新执行返回结果。

3.解析查询时会创建一个内部数据结构(解析树),然后对其进行各种优化。

第三层

第三层包含了存储引擎,负责Mysql的存储与提取。服务器通过Api与存储引擎进行通信,这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明。存储引擎包含几十个底层函数,用于执行诸如‘开始一个事物’或者‘根据主键提取一行数据’等操作。但存储引擎不会解析SQL,不同的存储引擎也不会互相通信,而只是简单的响应上层的请求。

1.服务器通过API与存储引擎通信,接口屏蔽了不同存储引擎之间的差异,使得上层查询透明。

2.不同存储引擎之间不会通信,只会简单相应上层服务的请求。

Mysql链接管理与安全性

每个客户端都会在服务器进程中拥有一个进程,这个连接的查询只会在只个单独的线程中执行,该线程只能轮流在某个CPU核心或者CPU中运行。服务器会缓存线程,因此不必为每一个连接新建或者销毁线程。

当客户端连接到服务器时,服务器需要对其进行认证。认证其基于用户名、原始主机信息、密码。如果使用了安全套接字(SSL)链接,还可以使用X.509证书认证。一旦客户端链接成功,服务器会继续验证该客户端是否具有执行某个特定查询的权限。

优化与执行

Mysql会解析查询,并创建内部数据结构(解析树),然后对其进行各种优化,包括重写查询、决定表的读写顺序,以及选择合适的索引。用户通过特殊的关键字提示优化器,影响他的决策过程。也可以请求优化器解释优化过程的各个因素,使用户知道服务器是如何进行优化决策的,并提供一个基准,便于用户重构查询和schema、修改相关配置,使其尽可能高效运行。

AAffA0nNPuCLAAAAAElFTkSuQmCC

优化器并不关心数据表使用的什么存储引擎,旦存储引擎对于优化查询是有影响的。优化器会请求存储引擎提供容量或者某个操作的具体开销信息,以及表数据的统计信息。

对于SELECT语句,在解析查询之前,服务器会先检查查询缓存,如果命中缓存,服务器就不会进行查询解析、优化和执行的整个过程,而是直接返回查询缓存中的内容。

你可能感兴趣的:(mysql逻辑部分)