MySql架构
架构图
MySql中有以下组件
- MySQL向外提供的交互接口(Connectors)
Connectors组件,是MySQL向外提供的交互组件,如java,.net,php等语言可以通过该组件来操作SQL语句,实现与SQL的交互。
- 管理服务组件和工具组件(Management Service & Utilities)
提供对MySQL的集成管理,如备份(Backup),恢复(Recovery),安全管理(Security)等
- 连接池组件(Connection Pool)
负责监听对客户端向MySQL Server端的各种请求,接收请求,转发请求到目标模块。每个成功连接MySQL Server的客户请求都会被创建或分配一个线程,该线程负责客户端与MySQL Server端的通信,接收客户端发送的命令,传递服务端的结果信息等。
- SQL接口组件(SQL Interface)
接收用户SQL命令,如DML,DDL和存储过程等,并将最终结果返回给用户。
- 查询分析器组件(Parser)
首先分析SQL命令语法的合法性,并尝试将SQL命令分解成数据结构,若分解失败,则提示SQL语句不合理。
- 优化器组件(Optimizer)
对SQL命令按照标准流程进行优化分析。
- 缓存主件(Caches & Buffers)
缓存和缓冲组件
- MySQL存储引擎(Storage Engines)
对于表的创建,数据的存储,检索,更新等都是由MySQL存储引擎完成的,这也是MySQL存储引擎在MySQL中扮演的重要角色。
Mysql逻辑结构
Mysql逻辑结构比掌握知识:(分三层)
- 第一层负责连接处理,授权认证,安全等
- 每个客户端连接都会在服务器进程中拥有一个线程,服务器维护了一个线程池,因此不需要为每一个新建的连接创建或者销毁线程。
- 当客户端连接到Mysql服务器时,服务器对其进行认证,通过用户名和密码认证,也可以通过SSL证书进行认证。
- 一旦客户端连接成功,服务器会继续验证客户端是否具有执行某个特定查询的权限。
2)第二层负责编译并优化SQL
- 这一层包括查询解析,分析,优化,缓存以及所有的的内置函数。
- 对于SELECT语句,在解析查询前,服务器会先检查查询缓存,如果能在其中找到对应的查询结果,则无需再进行查询解析、优化等过程,直接返回查询结果。
- 所有跨存储引擎的功能都在这一层实现:存储过程,触发器,视图。
3)第三层是存储引擎
- 存储引擎负责在MySQL中存储数据、提取数据。
- 存储引擎通过API与上层进行通信,这些API屏蔽了不同存储引擎之间的差异,使得这些差异对上层查询过程透明。
- 存储引擎不会去解析SQL,不同存储引擎之间也不会相互通信,而只是简单地响应上层服务器的请求。
MySql常用存储引擎
MySQL区别于其他数据库的一个最重要的特点是插件式存储引擎。它是基于表的,而不是数据库。MySql常用存储引擎如下:
InnoDB
- 支持事务
- 行锁设计
- 支持外键
- 支持MVCC,实现4种隔离级别
- 表的行按照主键顺序存放
- 最常用的数据库引擎。5.5后的默认引擎
MyISAM
- 5.5前的默认
- 不支持事务
- 表锁设计
- 只缓存索引文件,不缓存数据文件
- 可以使用myisampack工具进一步压缩。但是压缩后只读。
NDB
- 集群数据库
- 数据放在内存
- 支持高可用和高并发
Memory
- 数据放在内存
- Mysql临时表会用这个引擎
- 不支持TEXT和BLOB字段。所以如果临时表要用到这两个字段,会使用MyISAM引擎,而该引擎不缓存数据在内存,所以性能会有影响。
Archive
- 只支持INSERT SELECT操作
- 压缩后存放
- 适用于高速插入和压缩功能。例如日志的存储
Federated
- 不存放数据,指向远程Mysql的表
MariaDB
MySQL的开源分支,兼容MySQL
- 用于替换MyISAM
- 支持缓存和索引
- 行锁设计
- MVCC功能