[AIGC] 事务的四大特性是怎么实现的

文章目录

        • 原子性是通过 `undo log`实现的。
        • 一致性是通过 `redo log`实现的。
        • 隔离性的实现 (分事务的隔离级别讨论)
        • 持久性是利用 redo log 实现的
      • 写入过程

原子性是通过 undo log实现的。

事务的所有 修改操作 (增、删、改)的相反操作都会写入undo log, 比如事务执行了一条insert语句,那么undo log就会记录一条相应的 delete 语句。所以 undo log 是一个逻辑文件,记录的是相应的SQL语句一旦由于故障,导致事务无法成功提交,系统则会执行undo log中相应的撤销操作,达到事务回滚的目的。

一致性是通过 redo log实现的。

事务的所有 修改操作 (增、删、改),数据库都会生成一条 redo log 记录. 区别于undo log记录SQL语句、redo log记录的是事务对数据库的哪个数据页做了什么修改,属于物理日志。
redo日志应用场景:数据库系统直接崩溃,需要进行恢复,一般数据库都会使用按时间点备份的策略,首先将数据库恢复到最近备份的时间点状态,之后读取该时间点之后的 redo log 记录,重新执行相应记录,达到最终一致性目的。

隔离性的实现 (分事务的隔离级别讨论)
  1. 已提交读

实现策略:数据的读取不加锁,数据的写入、修改、删除需要加行锁,可以克服脏读,但无法避免不可重复读问题。
如下图是一个脏读场景,事务T2读取了T1未提交的数据。

使用加锁策略后,T1写数据x时,先获取了x的锁,导致T2的读操作等待,T1进行数据回滚后,释放锁,T2可以继续读取原来数据,不存在读取到脏数据的可能。

  1. 可重复读

实现策略:MVCC(多个版本行控制)策略。
下图是一个不可重复读的场景。由于T1的更新操作,导致T2两次读取的数据不一致。

单纯加行锁是无法解决的,T2先读取x值,T1之后经过加锁、解锁步骤,更新x的值,提交事务。T2再读的话,读出来的是T1更新后的值,两次读取结果不一致。
前面讲的行级锁是一个悲观锁,而MVCC是一个乐观锁,乐观锁在一定程度上可以避免加锁操作,因此开销更低。InnoDB的MVCC实现,是通过保存数据在某个时间点的快照来实现的。一个事务,不管其执行多长时间,其内部看到的数据是一致的。也就是事务在执行的过程中不会相互影响。
具体实现如下:
MVCC,通过在每行记录后面保存两个隐藏的列来实现:一个保存了行的创建时间,一个保存行的过期时间(删除时间),当然,这里的时间并不是时间戳,而是系统版本号,每开始一个新的事务,系统版本号就会递增。

  • selelct操作。只查找版本早于(包含等于)当前事务版本的数据行。可以确保事务读取的行,要么是事务开始前就已存在,或者事务自身插入或修改的记录。行的删除版本要么未定义,要么大于当前事务版本号。可以确保事务读取的行,在事务开始之前未删除。
  • insert操作。插入的行保存当前事务版本号为行版本号。
  • delete操作。删除的行保存当前事务版本号为删除标识。
  • update操作。变为insert和delete操作的组合,insert的行保存当前版本号为行版本号,delete则保存当前版本号到原来的行作为删除标识。

通过MVCC策略,可以确保一个事务里面读取的是同一个数据库版本快照。

持久性是利用 redo log 实现的

为了提高性能,和数据页类似,redo log 也包括两部分:一是内存中的日志缓冲(redo log buffer),该部分日志是易失性的;二是磁盘上的重做日志文件(redo log file),该部分日志是持久的。redo log是物理日志,记录的是数据库中物理页的情况 。
当数据发生修改时,InnoDB不仅会修改Buffer Pool中的数据,也会在redo log buffer记录这次操作;当事务提交时,会对redo log buffer进行刷盘,记录到redo log file中。如果MySQL宕机,重启时可以读取redo log file中的数据,对数据库进行恢复。这样就不需要每次提交事务都实时进行刷脏了。

写入过程

image.png
注意点:

  • 先修改Buffer Pool,后写 redo log buffer。
  • redo日志比数据页先写回磁盘:事务提交的时候,会把redo log buffer写入redo log file,写入成功才算提交成功(也有其他场景触发写入,这里就不展开了),而Buffer Pool的数据由后台线程在后续某个时刻写入磁盘。
  • 刷脏的时候一定会保证对应的redo log已经落盘了,也即是所谓的WAL(Write Ahead Log)(预写式日志),否则会有数据丢失的可能性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电脑快捷键怎么设置?记好这3个设置方法!

“作为一个职场小白,我对很多快捷键的应用都不是很熟悉,这导致我工作效率总是很低,大家平常在使用电脑时有什么比较好用的电脑快捷键设置方法给我推荐一下吗?” 在数字化时代,电脑已成为我们日常生活和工作的必备工具。…

基于Java.Web框架React、Vue.js技术开发的一套(C#医院体检系统成品源码、支持二开)

医院体检系统是一种专为体检中心/医院体检科等体检机构开发的全流程管理系统。该系统通过软件实现检测仪器数据的自动提取,内置多级医生工作台,细化工作并将体检检查结果汇总,生成体检报告登记到计算机系统中。此外,该系统还能进行…

什么是水经微图网络加密锁?

水经微图,以下简称“微图”。 我们在《什么是水经微图加密锁?》一文中,为你分享了什么是微图加密锁,以及其使用的方法。 现在,我们再为你分享什么是网络加密锁,以及其使用的方法。 什么是网络加密锁&…

微服务---feign调用服务

目录 Feign简介 Feign的作用 Feign的使用步骤 引入依赖 具体业务逻辑 配置日志 在其它服务中使用接口 接着上一篇博客,我们讲过了nacos的基础使用,知道它是注册服务用的,接下来我们我们思考如果一个服务需要调用另一个服务的接口信息&…

RAG进阶(二): RAG 融合(rag fusion)

在上一篇博客中,我们学习了多重查询(Multi Query)技术,Multi Query的基本思想是当用户输入查询语句(自然语言)时,我们让大模型(LLM)基于用户的问题再生成多个查询语句,这些生成的查询语句是对用户查询语句的补充,它们是…

计算机毕业设计 | vue+springboot 在线花店后台管理系统(附源码)

1,绪论 1.1 项目背景 随着社会发展,网上购物已经成为我们日常生活的一部分。但是,至今为止大部分电商平台都是从人们日常生活出发,出售都是一些日常用品比如:食物、服装等等,并未发现一个专注于鲜花的电商…

BSC链震撼登场:X314暴涨500倍

在Solana链上疯狂的“狗币”行情落下帷幕后,链上的最新热点再次来到了BSC链上。此次,BSC链上出现了备受关注的新协议,据说这是继Ordinals协议之后的又一创新之作。该协议被誉为现象级产品,自推出以来涨幅已达500倍,但其…

C补充1—1章1.0—C程序语言设计(许宝文,李志)

二手书到了,好消息,前主人看的很认真,坏消息,只看到这页了 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊最后几题好难啊啊啊啊啊,再议 目录 1.1 入门 1.2 变量与算数表达式 练习1-3 //打印温度对照表 练习1-4 //摄氏-华氏温…

古墓丽影年度版喜加一 亚马逊免费游戏领取教程+下载安装教程

最近我们的老朋友亚马逊平台又为玩家们带来了一款免费的3A大作,这款游戏作为古墓丽影的续作在全球范围内都有着很高的热度和评价。但是许多玩家不知道这款游戏该如何领取,下面小编就为大家带来详细教程。 在领取之前,我们一定要优化我们的网…

【Js逆向】某博反爬机制的逆向分析

相信很多接触过爬虫的师傅,在对某博进行请求的时候,发现某博是会对cookie校验的,而我们在模拟操作的时候,是直接把浏览器的cookie进行copy,虽然我没有测试过这个cookie的有效期,但我觉得这样只适合日常测试…

LNMP一键安装包

LNMP一键安装包是什么? LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin/Alibaba/Amazon/Mint/Oracle/Rocky/Alma/Kali/UOS/银河麒麟/openEuler/Anolis OS Linux VPS或独立主机安装LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQ…

亚马逊云科技产品测评:玩转云服务器(EC2)

文章目录 📑引言一、亚马逊发展历史介绍二、云服务器资源地域分布三、云服务器实例规格四、EC2计费模式五、亚马逊免费EC2领取 📑引言 亚马逊:世界上最大的云服务器提供商 亚马逊云科技 是由亚马逊公司提供的一系列云计算服务。它提供了弹性计…

KNOWLEDGE DISTILLATION BASED ON TRANSFORMED TEACHER MATCHING

摘要 温度标度作为logit匹配和概率分布匹配的bridge技术,在知识蒸馏(KD)中起着至关重要的作用。传统上,在蒸馏中,温度标度适用于教师的logits和学生的logits。在本文中,受到最近一些研究成果的启发&#x…

Leetcode—622. 设计循环队列【中等】

2024每日刷题(128) Leetcode—622. 设计循环队列 实现代码 class MyCircularQueue { public:MyCircularQueue(int k): q(k) {qSize k;}bool enQueue(int value) {if(isFull()) {return false;}q[rear] value;rear (rear 1) % qSize;deflag false;…

数据结构相关

数据结构相关 文章目录 数据结构相关[TOC](文章目录)前言一、数据结构介绍二、不同的逻辑结构的存储方案(Java实现)2.1 线性结构:线性表、数组2.2 线性结构:栈2.3 线性结构:队列2.4 树形结构:树 三、一些常见的3.1 布隆过滤器Bloo…

网络安全是否有需求

● 由于网络威胁数量不断增加,网络安全的需求很高。 ● 组织正在大力投资网络安全以保护其数据。 ● 就业市场缺乏熟练的网络安全专业人员。 ● 网络安全认证可以提升您在网络安全领域的职业前景。 ● 持续学习并了解最新的安全趋势在该领域至关重要。 网络安全重磅…

stm32f103zet6_串口实现-DHT11-tim1(定时)

1思路 1打开时钟 1.1使用定时器实现us级的计时 1.2在打开串口 1,3在DHT11驱动中修改引脚 stm32cudeMX 配置 1打开时钟 2打开串口 3打开tim1(定时器) 4生成代码 代码设置 1导入DHT11库(tim.h是定时器的文件系统自动生成的) DHT11.c #include "dht11.h" #inc…

鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步

基本概念 信号量(Semaphore) 是一种实现任务间通信的机制,可以实现任务间同步或共享资源的互斥访问。 一个信号量的数据结构中,通常有一个计数值,用于对有效资源数的计数,表示剩下的可被使用的共享资源数…

咖啡机定量出水的原理是什么

咖啡机实现定量出水的原理主要依赖于流量计的使用。流量计是一种能够测量液体或气体通过管道的速度和体积的装置。在咖啡机中,常用的小型流量计有霍尔式流量计和光电式流量计两种。 霍尔式流量计利用了霍尔效应的原理来实现流量测量。它包含一个带有两极磁铁的叶轮…

信创基础软件之操作系统

操作系统概述 操作系统是计算机系统软硬件资源的纽带。操作系统是连接硬件和数据库、中间件、应用软件的纽带,是承载各种信息设备和软件应用的重要基础软件。操作系统控制和管理整个计算机系统的硬件、软件资源,组织和调度计算机工作和资源,…
最新文章