本文主要是介绍MySql系列之Innodb存储引擎,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
插件化存储引擎是MySQL特点,用户可以根据自己的需求使用不同的存储引擎,甚至通过抽象的API接口实现自己的存储引擎。innodb存储引擎支持行级锁以及事务特性,也是多种场合使用较多的存储引擎,本文将介绍innodb存储引擎。
存储引擎简介
mysql系统来说,存储引擎是真正实现数据的存储与读取操作的对象,数据库实例通过抽象API接口与存储引擎交互,存储引擎自定义实现数据的物理、逻辑组织形式以及索引、事务等特性。
抽象存储引擎API接口是通过抽象类handler来实现,handler类提供诸如打开/关闭table、扫表、查询Key数据、写记录、删除记录等基础操作方法。每一个存储引擎通过继承handler类,实现以上提到的方法,在方法里面实现对底层存储引擎的读写接口的转调。从5.0版本开始,为了避免在初始化、事务提交、保存事务点、回滚操作时需要操作one-table实例,引入了handlerton结构让存储引擎提供了发生上面提到操作时的钩子操作。
存储引擎架构
物理组织结构
innodb存储引擎物理组织形式可以理解为其在磁盘的存储形式,表现为各种文件,其分类大概为
文件 | 功能 | 描述 |
---|---|---|
ibdatat1 | 共享表空间文件 | 共享表空间,存储各种缓冲数据 |
.frm | 表定义文件 | 记录表的定义,列名以及列的数据类型 |
.ibd | 表数据存储文件 | 存储数据表的数据,按行存储 |
ib_logfile0/1 | redo日志文件 | 重做日志文件,一共两个循环使用,一个写完即写另一个 |
逻辑组织结构
innodb数据逻辑存储形式为表空间,表空间→由段、区、页组成,页是innodb存储引擎磁盘管理的最小单位,即每次数据的读取与写入都是以页为单位。
其结构如下
表空间是innodb存储引擎逻辑结构的最高层,所有的数据都存储在表空间中,默认innodb有一个共享表空间,所有的数据都存储在共享表空间中,用户可以通参数innodb_per_table设置每张表单独存放在一个表空间中。
每张表的表空间内存储的只是数据、索引、插入缓冲页,其他数据,如回滚日志、插入缓冲索引页、事务信息,二次写缓冲等还是存放在共享表空间。
表空间由段组成,常见的段有数据段、索引段、回滚段组成,innodb存储引擎索引与数据共同存储,数据段即是B+树叶节点,索引段则存储非叶节点。
区则是由连续页组成,每个区的大小为1M,页的大小为16KB,即一个区中一共有64个连续的页。
语句的执行流程
这篇关于MySql系列之Innodb存储引擎的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!