MySQL整体架构图
简略版图
1.1连接管理
- 一句话:负责客户端连接服务器的部分
网络连接层, 对客户端的连接处理、安全认证、授权等,每个客户端连接都会在服务端拥有一个线程,每个连接发起的查询都会在对应的单独线程中执行。服务器上维护一个线程池,避免为每个连接创建和销毁线程。当客户端连接到MySQL服务器时,服务器对其进行认证。可以通过用户名与密码认证,也可以通过SSL证书进行认证。登录认证后,服务器还会验证客户端是否有执行某个查询的操作权限。这一层并不是MySQL所特有的技术。
1.2 解析与优化
- 查询缓存
- 语法解析
- 查询优化
MySQL的核心服务功能层,该层是MySQL的核心,包括查询缓存,解析器,解析树,预处理器,查询优化器。主要进行查询解析、分析、查询缓存、内置函数、存储过程、触发器、视图等,select操作会先检查是否命中查询缓存,命中则直接返回缓存数据,否则解析查询并创建对应的解析树。
1.3 存储引擎
存储引擎,负责数据的存储和提取,MySQL服务器通过API与存储引擎通信,屏蔽了各种引擎之间的差异,常见的存储引擎有:InnoDB、MyISAM。
1.3.1 MySQL支持的存储引擎:
存储引擎 | 描述 |
---|---|
ARCHIVE | 用于数据存档(归档,记录后不能再修改) |
BLACKHOLE | 丢弃写操作,读操作会返回空内容 |
CSV | 以英文逗号分隔的方式存储数据 |
FEDERATED | 用来访问远程表 |
InnoDB | 支持事务、行级锁、外键 |
MEMORY | 数据存在内存,不存磁盘;多用于临时表 |
MERGE | 用来管理多个MyISAM表构成的表集合 |
MyISAM | 主要是非事务处理存储引擎 |
NDB | MySQL集群专用存储引擎 |
备注:我们最常用的存储引擎是InnoDB,MyISAM,MEMORY,后面文章会对InnoDB做详细的架构分析
1.3.2 三者的区别:
1.3.3 设置表的存储引擎
CREATE TABLE 表名(
建表语句
) ENGINE = 存储引擎名称
1.4 文件系统
物理层 , 数据存储与日志, 将数据存放在硬盘上,后面文章会对磁盘结构做详细讲解。
总结
MySQL底层其实就相当于一个web应用结构。
例如:用户前端通过点击按钮发起ajax请求到java后台,后台接收到请求后将用户操作进行业务处理后,通过orm持久层框架(将业务实体与数据表联合)连接mysql,并将封装后的sql语句发送给mysql,mysql接收到sql后进行解析,优化,缓存。接着调用存储引擎的增删改查接口,对磁盘的database进行操作。