Innodb存储架构

news2024/11/15 10:47:09

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.coloradmin.cn/o/2152942.html

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

相关文章

docker技术(上)

一、docker简介 Docker 是一个开源的应用容器引擎,于 2013 年由 Solomon Hykes 推出并开源。它基于 Go 语言开发,遵从 Apache2.0 协议。Docker 可以让开发者将应用及其依赖包打包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows…

文件外发控制怎么做?公司文件外发管控的方法(这五种方法你一定要学会!)

还在担心重要文件发出去就"人间蒸发"? 或者每次发送公司机密都提心吊胆? 其实,文件外发就像放风筝,你需要时刻握住“线头”,确保它不会飞得太远! 今天我们来揭秘五种公司文件外发的神级管控方法…

基于SpringBoot的医院挂号就诊系统【附源码】

基于SpringBoot的高校社团管理系统(源码L文说明文档) 目录 4 系统设计 4.1界面设计原则 4.2功能结构设计 4.3.2 数据库物理设计 第5章 系统实现 5.1用户信息管理 5.2 医生信息管理 5.3公告类型管理 5.1公告信息管理 4…

C++进阶(2):多态

多态的概念 多态分为编译时多态(静态多态)和运行时多态(动态多态)。**编译时多态:**主要就是我们前面讲的函数重载和函数模版。之所以叫编译时多态,是因为实参传给形参的参数匹配是发生在编译时完成的(ps:通常把编译时一般归为静…

常见项目场景题1(数据量很大时如何去重,实现超时处理)

数据很多,限制内存,如何去重 对于大数据量去重的场景,我们可以考虑使用位图(Bitmap) Bitmap 是使用二进制来表示某个元素是否存在的数组。用0和1来表示存在与不存在 使用Bitmap的话,一个数字占用1bit,大大减少内存消耗…

JVM 调优篇8 调优案例5- 逃逸分析

一 逃逸分析 1.1 概念 逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,对象只在方法内部使用,则认为没有发生逃逸。当一个对象在方法中被定义后,它被外部方法所引用,则认为发生逃逸。例如作为…

打造未来企业:业务能力建模的实践应用与数字化转型的落地策略

在当今数字化迅速发展的时代,企业的转型迫在眉睫。通过数字技术提升运营效率、增强客户体验、优化资源配置成为了企业竞争的核心战略。《业务能力指南》为企业提供了清晰的业务能力建模框架,并指导企业如何将其应用于实际操作中,帮助企业在数…

(三)代码实现:Boustrophedon Cellular Decomposition Path Planning用珊格地图生成每个cell的覆盖路径

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言算法原理方法一:全地图进行牛耕覆盖步骤方法二:区域分解地图进行牛耕覆盖步骤凸多边形基于栅格地图的…

Windows系统文件夹中的文件名排序

一天张三、李四的同事周五接到王哥的一个任务需求,有一个文件夹,里面有许多图片文件,网页访问某个分类展示文件的时候,王哥希望文件名的展示顺序可以按照Windows资源管理器中文件名升序排序的方式展示。 网站图片目录中有如下图片…

程序遇到问题错误bug时的13种解决方法途径总结以及之前的一些具体例子

目录 1 信心--没有解决不了的bug 2 耐心、不要着急、静下心来、用脑思考 2.1 开始解决问题前不要着急,先思考 2.2 在解决问题的过程中也不要着急,要冷静思考 3 网络搜索 4 大模型问答:必应、kimi、通义千问、文心一言 5 看芯片手册、S…

0921VGG网络实现

深度学习之VGG网络搭建 1.VGG动机2.VGG架构3.代码4.结论1.VGG动机 随着卷积网络在计算机视觉领域的快速发展,越来越多的研究人员开始通过改变模型的网络结构在提高在图像识别任务中的精度,例如使用更小的卷积核和步长[2]。基于类似的想法,论文作者提出可以尝试通过改变卷积…

【设计模式】创建型模式(三):单例模式

创建型模式(三):单例模式 1.概念2.案例3.实现方式3.1 懒汉式,线程不安全3.2 懒汉式,线程安全3.3 饿汉式3.4 双检锁/双重校验锁(DCL,Double-Checked Locking)3.5 登记式/静态内部类3.…

俄罗斯OZON新生儿产品好不好卖,OZON新生儿产品

Top1 遥控水球坦克 Танк на радиоуправлении стреляющий орбизами PANAWEALTH 商品id:1384249985 月销量:692 欢迎各位OZON卖家朋友点击这里选品: 👉 D。DDqbt。COm/74rD 遥控射击水…

【项目管理进阶】风险问题

前言 各位盆友,你们期待的项目管理进阶系列有新的消息,请注意查收,并反馈哦~ 在参加项目的过程中,你是否面临或参加过类似如下的场面: 为了立项,先调研市场、技术、社会、组织内部的现状为了科学的管理项目…

如何使用Claude进行Android App开发 —— 基于Jetpack和Compose的电影App实例

如何使用Claude进行Android App开发 —— 基于Jetpack和Compose的电影App实例 近年来,人工智能(AI)在软件开发中的应用越来越广泛,帮助开发者在设计、编码、测试和优化中提高生产效率。Claude是Anthropic开发的一款强大的AI助手&…

Redis的三种持久化方法详解

Redis持久化机制详解 | JavaGuide Redis 不同于 Memcached 的很重要一点就是,Redis 支持持久化,而且支持 3 种持久化方式: 快照(snapshotting,RDB)只追加文件(append-only file, AOF)RDB 和 A…

Vue使用axios二次封装、解决跨域问题

1、什么是 axios 在实际开发过程中,浏览器通常需要和服务器端进行数据交互。而 Vue.js 并未提供与服务器端通信的接口。从 Vue.js 2.0 版本之后,官方推荐使用 axios 来实现 Ajax 请求。axios 是一个基于 promise 的 HTTP 客户端。 关于 promise 的详细介…

C++:类和对象OJ题

目录 一、求123...n 二、计算日期到天数的转换 三、日期差值 四、打印日期 一、求123...n 这里先把题目链接放在这里求123.....n 描述: 求123...n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C…

鸿萌数据恢复服务: 修复 Windows, Mac, 手机中 “SD 卡无法读取”错误

天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据恢复、数据备份解决方案与服务,并针对企业面临的数据安全风险,提供专业的相关数据安全培训。 公司是多款国际主流数据恢复软件的授权代理商,为…

老年人养生之道:岁月静好,健康常伴

老年人养生之道:岁月静好,健康常伴 随着年岁的增长,老年人更需注重养生,以维持身心的和谐与健康,享受幸福晚年。养生不仅是一种生活态度,更是一种智慧的选择,它涵盖了饮食、运动、心理、社交等…