当前位置: 首页 > news >正文

mysql--InnoDB存储引擎--架构和事务

MySQL进阶篇

文章目录

  • 架构
    • 1、逻辑结构
      • InnoDB 逻辑存储单元主层级关系图:
      • 1、表空间
      • 2、段
      • 3、区
      • 4、页
      • 5、行
      • 总结:
    • 2、架构
      • 2、1 内存架构
      • 2、2 磁盘架构
    • 3、事务
      • 3、1事务基础
        • (1)事务
        • (2)特性


架构

1、逻辑结构

在这里插入图片描述

InnoDB 逻辑存储单元主层级关系图:

在这里插入图片描述

1、表空间

表空间是InnoDB存储引擎逻辑结构的最高层, 如果用户启用了参数 innodb_file_per_table(在
8.0版本中默认开启) ,则每张表都会有一个表空间(xxx.ibd),一个mysql实例可以对应多个表空间,用于存储记录、索引等数据。

2、段

段,分为数据段(Leaf node segment)、索引段(Non-leaf node segment)、回滚段
(Rollback segment),InnoDB是索引组织表,数据段就是B+树的叶子节点, 索引段即为B+树的
非叶子节点。段用来管理多个Extent(区)。

3、区

区,表空间的单元结构,每个区的大小为1M。 默认情况下, InnoDB存储引擎页大小为16K,即一个区中一共有64个连续的页。

4、页

页,是InnoDB 存储引擎磁盘管理的最小单元,每个页的大小默认为 16KB。为了保证页的连续性, InnoDB 存储引擎每次从磁盘申请 4-5 个区。

5、行

行,InnoDB 存储引擎数据是按行进行存放的。在行中,默认有两个隐藏字段:   
**```Trx_id:每次对某条记录进行改动时,都会把对应的事务id赋值给trx_id隐藏列。``````Roll_pointer:每次对某条引记录进行改动时,都会把旧的版本写入到undo日志中,然后这个隐藏列就相当于一个指针,可以通过它来找到该记录修改前的信息。```**

总结:

个人理解:表空间表示一本书,段表示书中的章节,区表示每章节的小节,页表示书的每一页,行就是每页的每行数据。表空间里有多个段,一个段包含256个区,一个区包含64个页,一个页为16K。

2、架构

在这里插入图片描述

2、1 内存架构

在这里插入图片描述

内存架构由四个部分组成,缓存池(Buffer Pool), 更改缓冲区(Change Buffer), 日志缓存区(Log Buffer), 自适应哈希索引。

2、2 磁盘架构

在这里插入图片描述
1). System Tablespace
系统表空间是更改缓冲区的存储区域。如果表是在系统表空间而不是每个表文件或通用表空间中创建 的,它也可能包含表和索引数据。(在 MySQL5.x 版本中还包含 InnoDB 数据字典、 undolog 等 )
参数:innodb_data_file_path
系统表空间,默认的文件名叫 ibdata1 。
2). File-Per-Table Tablespaces
如果开启了innodb_file_per_table开关 ,则每个表的文件表空间包含单个InnoDB表的数据和索引 ,并存储在文件系统上的单个数据文件中。

    开关参数:innodb_file_per_table ,该参数默认开启。

3). General Tablespaces
通用表空间,需要通过 CREATE TABLESPACE 语法创建通用表空间,在创建表时,可以指定该表空间。

   创建表空间:CREATE TABLESPACE ts_name ADD DATAFILE 'file_name' ENGINE = engine_name;创建表时指定表空:CREATE TABLE xxx ... TABLESPACE ts_name;

4). Undo Tablespaces
撤销表空间,MySQL实例在初始化时会自动创建两个默认的undo表空间(初始大小16M),用于存储undo log日志。

5). Temporary Tablespaces
InnoDB 使用会话临时表空间和全局临时表空间。存储用户创建的临时表等数据。

6). Doublewrite Buffer Files
双写缓冲区,innoDB引擎将数据页从Buffer Pool刷新到磁盘前,先将数据页写入双写缓冲区文件中,便于系统异常时恢复数据。

7). Redo Log
重做日志,是用来实现事务的持久性。该日志文件由两部分组成:重做日志缓冲(redo log
buffer )以及重做日志文件( redo log ) , 前者是在内存中,后者在磁盘中。当事务提交之后会把所
有修改信息都会存到该日志中 , 用于在刷新脏页到磁盘时 , 发生错误时 , 进行数据恢复使用。


3、事务

3、1事务基础

(1)事务

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 通俗讲就是一组逻辑sql

(2)特性

原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

一致性(Consistency):事务完成时(提交完成后), 必须使所有的数据都保持一致状态

隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。不受外部环境影响而进行事务的执行

持久性(Durability): 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

实际上,我们研究事务的原理,就是研究MySQL的InnoDB引擎是如何保证事务的这四大特性的。

在这里插入图片描述

而对于这四大特性,实际上分为两个部分。 其中的原子性、一致性、持久化,实际上是由InnoDB中的两份日志来保证的,一份是 redo log日志,一份是undo log日志。 而持久性是通过数据库的锁, 加上MVCC来保证的。

在这里插入图片描述

在理解事务原理的时候,主要就是来研究一下redolog,undolog以及MVCC。

持续编辑中

相关文章:

mysql--InnoDB存储引擎--架构和事务

MySQL进阶篇 文章目录 架构1、逻辑结构InnoDB 逻辑存储单元主层级关系图:1、表空间2、段3、区4、页5、行总结: 2、架构2、1 内存架构2、2 磁盘架构 3、事务3、1事务基础(1)事务(2)特性 架构 1、逻辑结构 I…...

0基础学习VR全景平台篇 第79篇:全景相机-泰科易如何直播推流

泰科易科技是中国的一家研发全景相机的高科技公司,前不久,在2020世界VR产业大会上发布了新一代5G VR直播影像采集终端--360starlight。以其出色的夜景成像效果和一“部”到位的直播方案重新定义了VR慢直播相机,对行业具有高度借鉴意义。 本文…...

代码调试4:实现退化模型的训练

代码调试:实现退化模型的训练 作者:安静到无声 个人主页 目录 代码调试:实现退化模型的训练问题1:如何在coco原始编码的基础上修改原始的文件?**方法1**:修改生成的文件**方法2**:直接修改源文件`instances_train2014.json`和`instances_val2014.json`问题2:构建退化后…...

8.7工作总结

一、我们想自定义一个titileBar出现如下这种情况,发现他原来的titileBar还未隐藏。 后来我尝试修改主题使得他没有主题noActionBar发现也不行,后来我参考原先我看过的项目使用了如下代码 this.getActionBar().hide();发现会报这个错误java.lang.NullPoi…...

数据库的约束 详解

一、约束的概述 1.概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。 2.目的:保证数据库中数据的正确、有效性和完整性。 3.分类: 约束描述关键字非空约束限制该字段的数据不能为nullNOT NULL唯一约束保证该字段的所有数据都是唯一、不…...

Tomcat 编程式启动 JMX 监控

通过这篇文章,我们可以了解到,利用 JMX 技术可以方便获取 Tomcat 监控情况。但是我们采用自研的框架而非大家常见的 SpringBoot,于是就不能方便地通过设置配置开启 Tomcat 的 JMX,——尽管我们也是基于 Tomcat 的 Web 容器&#x…...

Git rebase和merge区别详解

文章目录 变基的基础用法变基过程中的冲突解决冲突后无法push问题更新变基后的代码更有趣的变基用法变基的风险用变基解决变基变基 vs 合并 此文在阅读前需要有一定的git命令基础,若基础尚未掌握,建议先阅读这篇文章Git命令播报详版 在 Git 中整合来自不…...

JDK动态代理的原理解析、代码实现

代理就像是:买家(客户端)——销售(代理对象)——工厂(目标) 买家不用直接去工厂买,而是直接通过销售就可以购买到,假设工厂生产的是杯子,那么工厂只需要提供杯子,而销售在不改变杯子的生产过程的情况下对杯子进行包装设…...

理解和使用Ansible模块,简化自动化任务

Ansible是一款强大的自动化工具,用于管理和配置IT基础设施。在Ansible的世界中,模块(Module)是至关重要的组成部分。本文将深入探讨Ansible模块,了解它们如何简化自动化任务的执行过程。 Ansible模块是Ansible的核心组…...

Docker 快速安装 MinIO

概述 MinIO 是一款基于Go语言的高性能对象存储服务,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 拉取docker镜像 docker pull minio/minio创建宿主机数据目录(共享数据卷) 此…...

【源码分析】Nacos如何使用AP协议完成服务端之间的数据同步?

AP节点的同步使用的是异步任务消息队列的方式来实现的。 取出任务之后将会放入到一个List集合中。 然后会发现任务的执行是由条件的。 首先是当前集群的节点数量等于1000,那么此时会直接开始同步,当然这个条件在小项目中不会成立,所以还有…...

黑客删除服务器数据后,间谍软件制造商 LetMeSpy 关闭

总部位于波兰的间谍软件 LetMeSpy 已不再运行,并表示将在 6 月份的一次数据泄露事件中关闭其服务器,其中包括从数千名受害者手机中窃取的大量数据。 LetMeSpy 在其网站上以英语和波兰语发布的通知中确认该间谍软件服务已“永久关闭”,并将于 …...

ebay儿童书包产品CPC认证

儿童书包是一种能够盛放书本或者文具的包。现在的书包五花八门,以普通的布料或者是帆布等制成,有背带,包内一般分栏。一般分三种,背在身后的,挎在肩上的,轮式(可以拖行)的。 一、美国…...

Debezium系列之:增量快照初始化历史数据实际应用案例

Debezium系列之:增量快照初始化历史数据实际应用案例 一、需求背景二、查看数据库表数据三、使用增量快照采集历史数据四、初始化历史数据一、需求背景 采集数据库数据发送到Kafka Topic,供下游实时开发消费,在采集最新数据的同时,希望把历史数据也发送到Kafka Topic同时采…...

Transformer1.0-预热

一.Encoder encoder:译为编码器,负责将输入序列压缩成指定长度的向量,这个向量就可以堪称是这个序列的语义。然后可进行编码或特征提取等操作 在transformer中encoder由6个相同的层组成,每个层包含 Multi-Head Self-AttentionPosition-Wise …...

【探索Linux】—— 强大的命令行工具 P.2(Linux下基本指令)

前言 前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C的一些知识,也相信大家都掌握的不错,今天博主将会新开一个Linux专题,带领大家继续学习有关Linux的内容。今天第一篇文章博主首先带领大家了解一下…...

供应链售后服务自动化,利用软件机器人将数据整合提升效率

随着供应链管理的不断发展,售后服务的重要性也日益凸显。良好的售后服务不仅可以提高客户满意度,还能增强品牌形象和忠诚度。然而,传统的供应链售后服务往往存在繁琐的操作、低效率和易出错的问题。为了解决这一挑战,越来越多的企…...

VIM浅谈

VIM 1. 文件1.1 管理多个文件 仅以此篇纪念VIM作者Bram Moolenaar。 1. 文件 刚刚使用VIM,很多小伙伴疑惑的就是如何退出VIM,一顿乱按结果修改了文件,q又退不出去,还需要保存。这是因为文件是保存在磁盘里的,使用Vim…...

《深度探索c++对象模型》第六章笔记

非原创,在学习 6 执行期语意学(Runtime Semantics) 有这样一个简单的案例: if (yy xx.getValue()) {// ... } 其中,xx和yy的定义为: X xx; Y yy; class Y定义为: class Y { public:Y();~Y();bool operator(con…...

wolfSSL5.6.3 虚拟机ubuntu下编译运行记录(踩坑填坑)

网上相关教程很多(包括wolfSSL提供的手册上也是如此大而化之的描述),大多类似如下步骤: ./configure //如果有特殊的要求的话可以在后面接上对应的语句,比如安装目录、打开或关闭哪些功能等等 make make install 然后结束,大体…...

开源歌词工具技术解析:跨平台音乐资源整合与高效处理方案

开源歌词工具技术解析:跨平台音乐资源整合与高效处理方案 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 开源歌词工具作为一款专注于音乐资源处理的解决方案…...

新手零基础入门:借助快马AI轻松理解并创建你的无名小站

作为一个刚入门编程的新手,想要搭建一个属于自己的"无名小站"确实会感到无从下手。最近我在InsCode(快马)平台上尝试了这个项目,整个过程出乎意料地顺利,下面分享我的学习心得。 项目结构规划 首先需要明确网站的基本框架。我的无名…...

【LeetCode】队列 栈 | 225.用队列实现栈

题目https://leetcode.cn/problems/implement-stack-using-queues/description/思路 两个队列 利用两个队列倒腾数据,保证一个队列始终为空,用来暂存除"栈顶"外的所有元素。每次push总是往非空队列里加(保证一个队列为空&#xff0…...

SVG-Morpheus实战教程:10个实用技巧打造惊艳UI动画

SVG-Morpheus实战教程:10个实用技巧打造惊艳UI动画 【免费下载链接】SVG-Morpheus JavaScript library enabling SVG icons to morph from one to the other. It implements Material Designs Delightful Details transitions. (THIS PROJECT IS NOT MAINTAINED ANY…...

RBF 神经网络车速预测模型功能说明书

基于RBF神经网络车速预测模型,根据历史车速信息,预测未来预测时域内的车速信息的时序预测模型,根据预测的信息对车辆进行控制可以对混动汽车的能量管理具有一定的参考意义 1.文件包括,训练工况(.mat数据,工…...

从产品到生态:观远数据的一站式智能分析平台之路

开篇:客户现场的真实发问 上个月在华东某快消头部企业的CIO圆桌会上,负责数字化转型的副总裁问了我一个很尖锐的问题: “你们BI厂商总说一站式,但我前几年买的BI工具,最后要么数据接不上要额外买数仓工具,要…...

告别虚拟机:在Mac/Windows本地用Docker快速拉起StarRocks测试环境

告别虚拟机:在Mac/Windows本地用Docker快速拉起StarRocks测试环境 当我们需要快速验证一个数据库的功能特性时,传统方式往往需要在虚拟机或物理机上经历繁琐的安装配置过程。对于StarRocks这样的分布式分析型数据库,传统部署方式更是需要准备…...

从零到一:手把手教你用TruckSim搭建你的第一辆虚拟牵引车模型

从零到一:手把手教你用TruckSim搭建你的第一辆虚拟牵引车模型 第一次打开TruckSim时,面对密密麻麻的参数和复杂的界面,很多新手会感到无从下手。作为一款专业的商用车动力学仿真软件,TruckSim确实有一定的学习门槛,但掌…...

GoWorld网络协议详解:TCP、KCP与WebSocket的多协议支持实现

GoWorld网络协议详解:TCP、KCP与WebSocket的多协议支持实现 【免费下载链接】goworld Scalable Distributed Game Server Engine with Hot Swapping in Golang 项目地址: https://gitcode.com/gh_mirrors/go/goworld GoWorld是一个用Go语言开发的可扩展分布式…...

终极GoogleTest死亡测试指南:如何轻松掌握程序异常退出测试技巧

终极GoogleTest死亡测试指南:如何轻松掌握程序异常退出测试技巧 【免费下载链接】googletest GoogleTest - Google Testing and Mocking Framework 项目地址: https://gitcode.com/GitHub_Trending/go/googletest GoogleTest(Google Testing and …...