MySql知识图谱、逻辑架构和执行流程

MySql知识图谱、逻辑架构和执行流程

一、MySql架构

逻辑架构,如图:

MySql知识图谱、逻辑架构和执行流程

连接器(Connectors)

系统管理和控制工具(Management Services & Utilities)

链接池(Connection Pool)

SQL Layer——MySql业务层

  •  SQL接口(SQL Interface)

          接收SQL DML DDL

  • 解析器(Parser)

select * from t1
词法分析 分词 ----- 》形成语法树
语法分析 分析 : 符合SQL的语法 SQL的语法 : SQL 92 limit MYSQL自己的语法
elect * from t1 语法错误 sytnx error ..
形成正确语法树
 

  • 查询优化器(Optimizer)

mysql 觉得你写的SQL 不是完美的
优化什么呢?
索引 只使用一个 使用最优
多表关联 小表驱动大表
where 从左到右 MySQL 找过滤力度最大的 先执行
where id=1 and sex='男'
where sex='男' and id=1
explain
 

  • 查询缓存(Cache和Buffer)

把查询结果存起来
select * from tuser where id=1
SQL --- > hash后的值 唯一 则 表示有
Map
key value
hash(select语句) 查询结果
 

存储引擎(Pluggable Storage Engines)

以表为单位
creat table xxx() engine=InnoDB/Memory/MyISAM
MySQL的存储引擎是针对表进行指定的。(engine=InnoDB\myisam)

存储引擎 说明
MyISAM 高速引擎,拥有较高的插入,查询速度,但不支持事务、不支持行
锁、支持3种不同的存储格式。包括静态型、动态型和压缩型。
 
InnoDB 5.5版本后MySQL的默认数据库,支持事务和行级锁定,事务处理、回滚、崩溃修复能力和多版本并发控制的事务安全,比MyISAM处理速度稍慢、支持外键(FOREIGN KEY)
ISAM

MyISAM的前身,MySQL5.0以后不再默认安装

MRG_MyISAM(MERGE)

将多个表联合成一个表使用,在超大规模数据存储时很有用

Memory

内存存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。只在内存上保存数据,意味着数据可能会丢失

Falcon

一种新的存储引擎,支持事物处理,传言可能是InnoDB的替代者

Archive

将数据压缩后进行存储,非常适合存储大量的独立的,作为历史记录的数据,但是只能进行插入和查询操作

CSV

CSV 存储引擎是基于 CSV 格式文件存储数据(应用于跨平台的数据交换)

xtraDB存储引擎是由Percona公司提供的存储引擎,该公司还出品了Percona Server这个产品,它是基
于MySQL开源代码进行修改之后的产品。
阿里对于Percona Server服务器进行修改,衍生了自己的数据库(alisql)。

InnoDB 和MyISAM 存储引擎区别:

  Innodb

Myisam

存储文件 .frm 表定义文件
.ibd 数据文件和索引文件
.frm 表定义文件
.myd 数据文件
.myi 索引文件
表锁、行锁 表锁
事务 支持 不支持
CRDU 读、写 读多
count 扫表 专门存储的地方 (加where也扫表)
索引结构 B+ Tree B+ Tree
外键 支持 不支持

 

存储引擎的选型:
InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比
较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的
更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚
(rollback)。
MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择
MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。
MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,
对数据的安全性要求较低,不需要持久保存,可以选择MEMOEY。它对表的大小有要求,不能建立太大
的表。所以,这类数据库只使用在相对较小的数据库表。
注意,同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择
InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询
的临时表,可以选择MEMORY存储引擎。
 

执行流程

简版执行流程图

 

MySql知识图谱、逻辑架构和执行流程

 

详细执行流程图:原文链接:https://blog.****.net/qq_26963433/article/details/78222608


MySql知识图谱、逻辑架构和执行流程

MySQL的流程分析:

1.连接

  1. 客户端发起一条Query请求,监听客户端的‘连接管理模块’接收请求
  2. 将请求转发到‘连接进/线程模块’
  3. 调用‘用户模块’来进行授权检查
  4. 通过检查后,‘连接进/线程模块’从‘线程连接池’中取出空闲的被缓存的连接线程和客户端请求对接,如果失败则创建一个新的连接请求

2.处理

  1. 先查询缓存,检查Query语句是否完全匹配,接着再检查是否具有权限,都成功则直接取数据返回
  2. 上一步有失败则转交给‘命令解析器’,经过词法分析,语法分析后生成解析树
  3. 接下来是预处理阶段,处理解析器无法解决的语义,检查权限等,生成新的解析树
  4. 再转交给对应的模块处理
  5. 如果是SELECT查询还会经由‘查询优化器’做大量的优化,生成执行计划
  6. 模块收到请求后,通过‘访问控制模块’检查所连接的用户是否有访问目标表和目标字段的权限
  7. 有则调用‘表管理模块’,先是查看table cache中是否存在,有则直接对应的表和获取锁,否则重新打开表文件
  8. 根据表的meta数据,获取表的存储引擎类型等信息,通过接口调用对应的存储引擎处理
  9. 上述过程中产生数据变化的时候,若打开日志功能,则会记录到相应二进制日志文件中

3.结果

  1. Query请求完成后,将结果集返回给‘连接进/线程模块’
  2. 返回的也可以是相应的状态标识,如成功或失败等
  3. 连接进/线程模块’进行后续的清理工作,并继续等待请求或断开与客户端的连接

4:小结
用户模块校验用户,然后去线程连接池拿线程(连接足够的话),找命令分发器,到查询缓存模块查SQL语句,如果没有,走命令解析器,然后访问控制模块,设定用户的权限,设定好后走表管理模块,获取锁和缓存,然后获取各种信息,存储的方式:存储引擎,从存储引擎获取数据,然后返回