MySQL系列 | MySQL高级-08逻辑架构

MySQL逻辑架构

MySQL做为一个大型的网络程序、数据管理系统,架构很是复杂。下图大体画出了其逻辑架构。MySQL基架大体包括以下几大模块组件:mysql

 

(1)MySQL向外提供的交互接口(Connectors)sql

 

(2)管理服务组件和工具组件(Management Service & Utilities)数据库

 

(3)链接池组件(Connection Pool)缓存

 

(4)SQL接口组件(SQL Interface)网络

 

(5)查询分析器组件(Parser)架构

 

(6)优化器组件(Optimizer)app

 

(7)缓存主件(Caches & Buffers)ide

 

(8)插件式存储引擎(Pluggable Storage Engines)函数

 

(9)物理文件(File System)工具

 

Connectors
MySQL首先是一个网络程序,其在TCP之上定义了本身的应用层协议。因此要使用MySQL,咱们能够编写代码,跟MySQL Server创建TCP链接,以后按照其定义好的协议进行交互。固然这样比较麻烦,比较方便的办法是调用SDK,好比Native C API、JDBC、PHP等各语言MySQL Connector,或者经过ODBC。但经过SDK来访问MySQL,本质上仍是在TCP链接上经过MySQL协议跟MySQL进行交互。

Connection Management
每个基于TCP的网络服务都须要管理客户端连接,MySQL也不例外。MySQL会为每个链接绑定一个线程,以后这个链接上的全部查询都在这个线程中执行。为了不频繁建立和销毁线程带来开销,MySQL一般会缓存线程或者使用线程池,从而避免频繁的建立和销毁线程。

客户端链接到MySQL后,在使用MySQL的功能以前,须要进行认证,认证基于用户名、主机名、密码。若是用了SSL或者TLS的方式进行链接,还会进行证书认证。

SQL Interface
MySQL支持DML(数据操做语言)、DDL(数据定义语言)、存储过程、视图、触发器、自定义函数等多种SQL语言接口。

Parser
MySQL会解析SQL查询,并为其建立语法树,并根据数据字典丰富查询语法树,会验证该客户端是否具备执行该查询的权限。建立好语法树后,MySQL还会对SQl查询进行语法上的优化,进行查询重写。

Optimizer
语法解析和查询重写以后,MySQL会根据语法树和数据的统计信息对SQL进行优化,包括决定表的读取顺序、选择合适的索引等,最终生成SQL的具体执行步骤。这些具体的执行步骤里真正的数据操做都是经过预先定义好的存储引擎API来进行的,与具体的存储引擎实现无关。

Caches & Buffers
MySQL内部维持着一些Cache和Buffer,好比Query Cache用来缓存一条Select语句的执行结果,若是可以在其中找到对应的查询结果,那么就没必要再进行查询解析、优化和执行的整个过程了。

Pluggable Storage Engine
存储引擎的具体实现,这些存储引擎都实现了MySQl定义好的存储引擎API的部分或者所有。MySQL能够动态安装或移除存储引擎,能够有多种存储引擎同时存在,能够为每一个Table设置不一样的存储引擎。存储引擎负责在文件系统之上,管理表的数据、索引的实际内容,同时也会管理运行时的Cache、Buffer、事务、Log等数据和功能。

MySQL 5.7.11默认支持的存储引擎以下:

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

File System
全部的数据,数据库、表的定义,表的每一行的内容,索引,都是存在文件系统上,以文件的方式存在的。固然有些存储引擎好比InnoDB,也支持不使用文件系统直接管理裸设备,但现代文件系统的实现使得这样作没有必要了。

在文件系统之下,可使用本地磁盘,可使用DAS、NAS、SAN等各类存储系统。

相关文章
相关标签/搜索