mysql-构架原理
前言
提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、体系构架
构架自上而下一次是网络连接层、服务层、存储引擎层和系统文件层。
1.网络连接层
通过各自的API去连接各自的语言,例如java(jdbc)、Python等
2.服务层
连接池、系统管理和控制工具、SQL接口、解析器、查询优化器、缓存 连接池:负责储存和管理客户端与数据库的连接 系统管理和控制工具:集群管理、备份恢复等 SQL接口:接受客户端的SQL命令,返回用户需要的结果 解析器:将SQL解析生成解析树,检查是否合法 查询优化器:检测合法后,将由优化器将其转化成执行计划,然后与存储引擎交付 缓存:表缓存、记录缓存、权限缓存、引擎缓存等
3.存储引擎层
负责数据存储与提取,与底层系统文件的额交互。最常见的存储引擎是MYISAM、MYSQL
4.系统文件层
负责将数据库的日志存储在文件系统上、完成和存储引擎的交互。有日志文件、数据文件、配置文件、pid文件、socket文件等
二、运行机制
1.创建连接
客户端/服务器通信协议与MySQL建立连接,通信方式是半双工。 通信机制:全双工、半双工、单工 全半工:能同时发送和接收数据,例如打电话 双半工:指的是某一时刻,要么发送数据要么接受数据,不能同时 单工:只能接收或是发送,例如单行道
2.查询缓存
如果开启了查询缓存且在查询缓存过程中查询到完全相同的SQL语句,则将查询结果直接返回给客户端;如果没有开启查询 缓存或者没有查询到完全相同的 SQL 语句则会由解析器进行语法语义解析,并生成“解析树”。
3.解析器
没有缓存就将SQL语句语法解析,生成解析树。对语法进行检查是否存在问题。
4.查询优化器
查询优化策略有以下几点: 等价变换策略、优化count、min、max等函数、提前终止查询、in的优化 等价策略:5=5 and a>5 改成 a > 5;a < b and a=5 改成b>5 and a=5;基于联合索引,调整条件位置等 优化count、min、max等函数:InnoDB引擎min函数只需要找索引最左边;InnoDB引擎max函数只需要找索引最右边;MyISAM引擎count(*),不需要计算,直接返回 提前终止查询:使用了limit查询,获取limit所需的数据,就不在继续遍历后面数据 in的优化:使用二分查找查找数据,比如where id in (2,1,3),变成 in (1,2,3)
5.查询执行引擎负责执行 SQL 语句
如果开启了查询缓存,先将查询结果做缓存操作,返回结果过多,采用增量模式返回
三、存储引擎
在5.5版本之前默认采用MyISAM存储引擎,从5.5开始采用InnoDB存储引擎
1.解析器 InnoDB和MyISAM对比
- 事务和外键: InnoDB支持事务和外键,安全;MYISAM不支持事务和外键
- 锁机制:INNODB支持行级锁;基于索引;MYISAM支持表级锁。锁定整张表
- 索引结构:INNODB使用聚集索引,记录和索引在一起存储;MYISAM使用非聚集索引,索引和记录分开
- 并发处理能力:INNODB读写阻塞可以与隔离级别有关,可以采用多版本并发控制支持高并发;MYISAM使用表级锁,并发处理能力差,读之间阻塞,写之间不阻塞
- 存储文件:InnoDB表对应两个文件,一个.frm表结构文件,一个.ibd数据文件; MyISAM表对应三个文件,一个.frm表结构文件,一个MYD表数据文件,一个.MYI索引文件
总结:是否需要事务?有,InnoDB; 是否存在并发修改?有,InnoDB; 是否追求快速查询,且数据修改少? 是,MyISAM在绝大多数情况下,推荐使用InnoDB
2.InnoDB存储结构
- 内部结构:Buffer pool、Change Buffer、Adaptive Hash Index 和Log Buffer四大组件。
- 磁盘结构:Tablespaces,InnoDB Data Dictionary,Doublewrite Buffer、Redo Log和Undo logs
3.InnoDB数据文件
- 分为一个ibd数据文件–>Segment(段)–>Extent(区)–>Page(页)–>Row(行)
- 页:用于存储多个Row行记录,大小为16K。包含很多种页类型,比如数据页,undo页,系
统页,事务数据页,大的BLOB对象页。 - 行,包含了记录的字段值,事务ID(Trx id)、滚动指针(Roll pointer)、字段指针(Field
pointers)等信息。
总结
对mysql构架结构以及原理进行简单的介绍。
|