Innodb存储架构

Innodb整体存储架构

Innodb是一款兼顾性能及可靠性的存储引擎,主要分为内存存储结构和磁盘存储结构,二者分别扮演着提高性能和数据持久化的工作
在这里插入图片描述
内存结构中定义了缓冲池、变更缓冲区、日志缓冲区、自适应哈希四个缓冲区,它们均是为提升查询效率服务的,
磁盘结构中定义了各种表空间,分别是系统表空间、独立表空间、通用表空间、临时表空间、撤销表空间、双写缓冲区,它们均是为了可靠性服务的

表空间文件(*.ibd)

MySQL所有的数据最终都需要刷新到磁盘上进行持久化保证数据安全,必须通过合理的数据结构对庞大的数据集进行组织管理,MySQL默认情况下为每一张表生成一份独立表空间,表空间内部定义了不同的结构进行分层管理数据,从大到小依次段segment,组group,区extent,页page,行line
其中数据存储和查询返回的最小单位是数据行line
而MySQL服务与磁盘IO的最小单位为页page,一页的大小为16kb,页的设计基于局部性原理,尽量的减少访问磁盘的次数,来提高效率

页结构:

页是一次申请的一段连续空间,每一个页由页头,页尾,页主体构成,其中页主体还能细分为数据页头,首行末行、用户数据区,空闲区、页目录
在这里插入图片描述
页主体主要由数据行构成,是存放用户真实数据的区域
页头存放页的一些描述信息,用来组织页与页之间的关联,通过页头所携带的信息可以快速寻找到上下页
页尾主要符合数据校验,确保数据的完整性

页主体:

数据页头:
用来描述当前页主体的状态,例如用户数据行数,空闲区,页目录的位置,事务索引有关信息
首行末行:
页主体初始化时就有了首行和末行,它们分别代表用户数据区的开始和结束
空闲区: 页主体中还未被使用的区域,可以被新增的用户数据所覆盖
用户数据区: 区中的所有用户数据以行为单位组织,每一个数据行通过单项链表组织,数据行可以通过行中存储的下一行偏移量来访问下一行数据
页目录: Innodb会通过主键对数据进行排序处理便于二分查找,当数据量庞大时,页目录中为生成一个个槽slot结构,每一个槽管理一小段数据行集合,查询时先通过检索槽来缩小查找范围

区结构:

批量读取数据的场景难免遇到数据跨页的情况,一旦发生数据跨页,就需要进行磁盘IO,严重影响效率,但是好在跨页访问的数据页在大多数情况下临近的,因此MySQL定义了区的概念用来管理多张页,如果用户频繁的对某一个区中的页进行访问,索性就把整个区加载到内存中,之后访问区中的页就不需要访问磁盘了
在这里插入图片描述

组结构:

同样问题引入了组结构来管理区,解决数据访问跨区的问题
在这里插入图片描述

行结构:

真实的数据在表空间以数据⾏的形式存储,即每⼀条数据都对应着表中的⼀⾏
数据行结构如图所示
在这里插入图片描述

变长字段长度列表+null值列表+头信息属于数据行描述信息
主键值+tx_id+roll_ptr+列属于数据行数据信息

主键值是一定存在的,不论用户是否手动定义

如果表中定义了主键,则直接存储主键的值;
如果是复合主键会根据列定义的顺序依次排列在这⾥;
如果没有主键,会优先使⽤第⼀个不允许为NULL的 UNIQUE 唯⼀列作为主键;
如果既没有主键也没有唯⼀键,那么InnoDB会构建⼀个6字节的字段 DB_ROW_ID 作为⾏的唯⼀标识,存储在真实数据的头部

tx_id为页中数据行的id,是页中数据行的唯一标识符
roll_ptr保存数据行的上一个版本,用于事务回滚操作

头信息:
在这里插入图片描述
next_record是下一行的地址偏移量,正是通过next_record行与行之间才能使用单链表级联
在这里插入图片描述
record_type
0表示普通数据行
1表示索引数据行
2表示首行
3表示尾行
heap_no
0表示首行
1表示尾行
插入的数据行heap_no从2开始自增
n_owned
用于记录槽中的行数
一个槽中只有最后一行数据需要写明n_owned的值
delete_mask
删除标记位,当删除数据行时先把当前位置标记为已删除,将上一行数据和下一行数据进行链接,做到逻辑上的删除操作,同时将需要删除的行next_record指向一个垃圾链表,在合适的时机服务端会对垃圾链表中的数据行进行统一的物理删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1541286.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

linux网络-----传输层

前言 一.传输层: 数据要交接应用层先通过传输层(给哪个程序发数据) 传输层作用:负责数据能够从发送端传输接收端。对于应用层来说有许多服务,传输层怎么知道把数据发给那个应用服务? 这时就有了端口号&am…

kubernetes中的认证授权

目录 一、kubernetes API访问控制 1、UserAccount与ServiceAccount (1)ServiceAccount (2)示例 二、认证(在k8s中建立认证用户) 1、创建UserAccount 2、RBAC(Role Based Access Control&…

Redis——redispluspls库——通用命令以及String类型相关接口使用

文章目录 通用命令get,setkeys插入迭代器 expire和ttltype string 类型接口set和getset NX和XXmset 和 mgetgetrange 和 setrangeincr 和 decr 通用命令 get,set void get_set_test(sw::redis::Redis& redis){//bool set(const sw::redis::StringV…

Iterative Regularized Policy Optimization with Imperfect Demonstrations

ICML 2024 paper code Intro 利用基于次优专家数据的专家策略,通过policy constraint的形式引导智能体的在线优化,同时通过利用在线高质量数据扩展专家数据,并有监督得对专家策略进行矫正。二者交替优化实现目标策略的迭代更新 Method 上述…

51单片机-红外遥控器(NEC标准)-实验(红外遥控及调速电机)

作者:Whappy 时间:2024.9.20 总结一下!基础实验到这儿里就圆满结束,历经25天,将51单片机学完并亲自手敲代码近5000行,在手敲代码过程中,明显感觉的看和敲,明显就是不同的感觉&…

STM32 通过 SPI 驱动 W25Q128

目录 一、STM32 SPI 框图1、通讯引脚2、时钟控制3、数据控制逻辑4、整体控制逻辑5、主模式收发流程及事件说明如下: 二、程序编写1、SPI 初始化2、W25Q128 驱动代码2.1 读写厂商 ID 和设备 ID2.2 读数据2.3 写使能/写禁止2.4 读/写状态寄存器2.5 擦除扇区2.6 擦除整…

基于SpringBoot的在线点餐系统【附源码】

​基于SpringBoot的高校社团管理系统(源码L文说明文档) 4 系统设计 4.1 系统概述 网上点餐系统的结构图4-1所示: 图4-1 系统结构 模块包括主界面,首页、个人中心、用户管理、美食店管理、美食分类管理、美食…

前端开发者必学:mo.js动画库

前端开发者必学:mo.js动画库 前言 在当今的网页设计中,动态效果和交互性是提升用户体验的关键因素。 mo.js,一个轻量级的 JavaScript 动画库,为前端开发者提供了一种简单而强大的方法来创建引人注目的动画效果。 本文将向您介…

Nature|PathChat:病理学多模态生成性AI助手的创新与应用|顶刊精析·24-09-21

小罗碎碎念 今日顶刊:Nature 这篇文章今年6月就发表了,当时我分析的时候,还是预印本,没有排版。今天第一篇推文介绍的是Faisal Mahmood ,所以又把这篇文章拉出来详细分析一下。 作者角色作者姓名单位名称单位英文名称第…

目标拟合椭圆

对于目标区域,the ellipse fit is computing by matching second-order moments.

【C/C++】速通涉及string类的经典编程题

【C/C】速通涉及string类的经典编程题 一.字符串最后一个单词的长度代码实现:(含注释) 二.验证回文串解法一:代码实现:(含注释) 解法二:(推荐)1. 函数isalnum…

Linux文件IO(六)-多次打开同一个文件

大家看到这个小节标题可能会有疑问,同一个文件还能被多次打开?事实确实如此,同一个文件可以被多次打开,譬如在一个进程中多次打开同一个文件、在多个不同的进程中打开同一个文件,那么这些操作都是被允许的。本小节就来…

Linux软件包管理器、Linux开发工具、vim的配置等的介绍

文章目录 前言一、Linux软件包管理器yum二、Linux开发工具1. 命令模式2. 插入模式3. 底行模式4. 三种模式的切换5. 命令模式下的快捷键 三、vim的配置总结 前言 Linux软件包管理器、Linux开发工具、vim的配置等的介绍 一、Linux软件包管理器yum 关于rzsz 这个工具用于 window…

动手学深度学习(李沐)PyTorch 第 2 章 预备知识

2.1 数据操作 N维数组样例 N维数组是机器学习和神经网络的主要数据结构 张量表示一个由数值组成的数组,这个数组可能有多个维度。 具有一个轴的张量对应数学上的向量(vector); 具有两个轴的张量对应数学上的矩阵(…

MySQL高阶1843-可疑银行账户

目录 题目 准备数据 ​分析数据 实现 总结 题目 如果一个账户在 连续两个及以上 月份的 总收入 超过最大收入(max_income),那么认为这个账户 可疑。 账户当月 总收入 是当月存入资金总数(即 transactions 表中 type 字段的…

【Unity-UGUI组件拓展】| Image 组件拓展,支持FIlled和Slice功能并存

🎬【Unity-UGUI组件拓展】| Image 组件拓展,支持FIlled和Slice功能并存一、组件介绍二、组件拓展方法三、完整代码💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏…

C / C++的内存管理

前言 Hello,我又回来了,今天我们将继续学习C部分,今天我们将承接前面的知识,继续学习C的内存管理,今天的内容较为重要,所以我们废话不多说,我们还是按例三连上车,开始我们今天内容&…

Python中lambda表达式的使用——完整通透版

文章目录 一、前言二、 基本语法三、举个简单的例子:四、常见应用场景1. 用于排序函数sort() 方法简介lambda 表达式的作用详细解释进一步扩展总结 2、与 map、filter、reduce 等函数结合1、 map() 函数示例:将列表中的每个数字平方 2、 filter() 函数示…

Typora安装和导入导出

Typora安装和导入导出 文章目录 Typora安装和导入导出前言Typora v1.9.5Typora v1.4.7Pandoc 前言 Typora v1.9是最新版, , Typora v1.4是老版本的, 这两个选择一个即可Pandoc可以导入导出word Typora v1.9.5 Typora v1.9.rar, 提取码:tian按ctrl单击鼠标左键打开…

数据飞轮崛起:数据中台真的过时了吗?

一、数据中台的兴起与困境 随着大数据技术的不断发展,我见证了企业数据能力建设的演变。从数据中台的兴起,到如今数据飞轮模式的热议,企业的数据管理理念经历了巨大的变化。起初,数据中台作为解决数据孤岛、打破部门壁垒的“救星…