一 Mysql 架构分层
总体上,我们把Mysql分为三层:
建立连接和交互的客户端
真正执行操作的服务层
跟硬件打交道的存储引擎层
二 Mysql 查询过程
(1) 查询过程
看图了解Mysql查询大致过程:
- 客户端向服务端发起一条请求(这里建立通信过程)
- 服务端先检查缓存,如果命中缓存,直接返回结果,否则进行下一阶段
- 服务器进行sql解析和预处理,再经过查询优化器形成对应的执行计划
- mysql根据执行计划,调用API给存储引擎, 进行数据的读取和存储
- 缓存查询结果,并将结果返回给客户端
三 Mysql 通信过程
首先,Mysql必须要运行一个服务, 监听默认的3306端口
我们开发系统和第三方对接的时候,必须弄清两件事。
第一个是通信协议
第二个是消息格式
1 通信协议
通信类型: 同步或异步
同步通信特点:
(1) 同步通信依赖呗调用方, 受限于被调用放的性能。也就是i说, 应用操作数据库,线程会阻塞,等待数据库的返回。
(2)一般至能做到一对一。
异步通信特点:
(1)避免阻塞等待,但是不能节省SQL执行时间。
(2)如果异步存在并发,每一个SQL的执行都要单独建立一个连接,避免数据混乱
连接方式: 长连接或短连接
短连接: 操作完,马上close掉
长连接: 可以保持打开,减少服务端创建和释放连接的消耗,
后面的程序访问还可以使用这个连接。
通信协议
通信协议主要有四种: Unix Socket, 内存共享, 命名管道, TCP/IP 协议
Unix套接字:适合Unix和Lunix系统, 客户端和Mysql服务器在同一台电脑上
内存共享和命名管道: 适合Window系统, 客户端和Mysql服务器在同一台电脑上
TCP/IP:任何系统下都可以使用
2 通讯方式
一般通讯方式:
单工: 两台计算机通信时,数据传输是单向的。 如:遥控器
半双工: 两台计算器通信时, 数据传输是双向的,但是不能同时发。 如: 对讲机
双工: 两台计算机通信时,数据传输是双向的,并且可以同时传输。
mysql使用半双工的通讯方式。
要么客户端向服务端发送数据,要么服务端向客户端发送数据。所以, Mysql的语句不管多大,都是一次性发送。
3 通讯过程
mysql客户端和服务的交互过程
主要分为两部分: 握手认证阶段, 命令执行阶段
3.1 握手认证阶段
服务器 -> 客户端: 握手初始化消息
客户端 -> 服务端:登录认证消息
服务端 -> 客户端: 认证结果消息
3.2 命令执行阶段
客户端 -> 服务端: 执行命令消息
服务端 -> 客户端: 命令执行结果