MySQL数据库基本框架

1.MySQL架构

1.1MySQL分层

在学习MySQL理论知识之前,需要对MySQL分层有一个全面的了解。这样对MySQL知识体系有一个全面的了解。MySQL分层架构如图所示:
图1 MySQL分层架构
(1)客户端:各种语言编写的通信协议。例如Java的jdbc或者Druid连接池等,负责和MySQL服务端连接通信。
(2)MySQL服务层:主要包含连接器、SQL接口、解析器、优化器、存储引擎(Innodb)等。
(3)文件系统层:位于磁盘上,包含数据、索引与日志等。
其中MySQL服务层与磁盘文件之间有一个OS Cache(内核态内存),是性能和一致性的折中选择,后文会介绍。
重点:MySQL读(select)、写(update、insert、delete)操作都是在Innodb存储引擎的的缓冲池(Buffer Pool)中完成,并不会直接对磁盘数据进行操作。

1.2MySQL服务层核心组件

结合图一可以知道MySQL服务层的核心组件,每个组件的具体功能如下:
(1)连接器:从连接池中取出连接对象建立连接,进行身份认证、权限授予等。
(2)SQL接口:负责接受SQL语句、等待接收执行语句的结果。
(4)解析器:对SQL语句进行词法分析、语法分析、生成语法树等。
(5)优化器:生成执行计划、例如索引选取、连接方式选择、查询条件顺序更改等。
(6)执行器:根据优化后的SQL语句调用存储引擎查询数据,将结果返回给SQL接口。
(7)**存储引擎:**MySQL存储引擎主要有MySAM、Innodb等,以插件的形式存在,当前主要使用Innodb。下文所有介绍都是基于Innodb存储引擎。

前六个知道大概做什么就行,数据库存储引擎是精华。后面会花大量篇幅介绍存储引擎(Innodb)。

1.3Innodb核心组件

Innodb核心组件如图所示,主要包括缓冲池(Buffer Pool)、写缓冲(Change Buffer)、日志缓冲(Log Buffer)等。自适应哈希(Adaptive Hash Index)可以自行了解,不重要。
图2 Innodb核心组件图示
前置知识:磁盘IO就是向磁盘读、写数据;落盘就是数据持久化到磁盘上。
缓冲池:主要是为了提高查询性能。Innodb将磁盘数据缓存到缓冲池中,避免每次数据访问都要进行磁盘IO来加速读、写请求。
写缓冲:主要是为了提高写性能,当数据不在缓冲池中时也可以不进行磁盘IO完成写操作。
日志缓冲:主要记录重做日志(redo Log),Innodb存储引擎特有,用于丢失数据恢复(崩溃恢复),保证数据安全。

1.4MySQL数据存储方式(对应磁盘文件)

MySQL数据以表空间(tablespace)、段(segment)、区(extend)、页(page)、行(row)存储。

大家可以参照下图简单理解数据的存储:图3 MySQL数据存储方式
MySQL和磁盘之间进行数据交互就是以页为单位,因此本文只对页和行进行详细讲解。

:Innodb默认一页是16KB的连续空间。页存放真实数据或者索引,同一页只能全为数据或者全为索引。
数据页格式及连接方式如下
图4 数据页
数据页中我们需要重点关注File Header中的页号、User Records、Page Directory。数据检索流程大概是根据检索条件判断数据所在页号,然后到对应页中根据Page Directory快速检索数据在User Records中链表上的具体位置。
数据添加及页分配
图5 向数据页添加数据
:一条数据记录,存储数据基本单位。由页中的User Records保存。
图6 数据行

MySQL数据行有多种形式,本文仅介绍Compact格式。

记录额的外信息:隐藏字段:
变长字段长度列表(非必需):roll_pointer:回滚指针,指向历史记录,以回滚段的形式存在。回滚链对用undo Log日志。
​NULL值列表(非必需):如果字段中有允许为NULL的字段,则将这些字段是否为null的信息存储在NULL值列表中。NULL值列表占用1个字节。值得注意的是,NULL值列表页不是必须的,如果表中没有允许存储 NULL 的列,则不存在NULL值列表。trx_id:事务id,在视图读的MVCC中会用到
​记录头信息:记录头详细信息已经在图中展示row_id:如果不存在逐渐就使用该字段替补主键id
  • 25
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值