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

分布式事务之本地事务

在这里插入图片描述

在这里插入图片描述

🚀 分布式事务 🚀

🌲 AI工具、AI绘图、AI专栏 🍀
🌲 如果你想学到最前沿、最火爆的技术,赶快加入吧✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 分布式事务 🚀

🍔 目录

    • 🌱 一.分布式事务之本地事务
      • 🌱 1.1 本地事务 - ACID原则
      • 🌱 1.2 本地事务 - 事务日志undo和redo
        • 🌴 1.2.1 事务日志 - undo log日志
        • 🌴 1.2.2 事务日志 - redo log日志
        • 🌴 1.2.3 总结
    • 🌱 二.总结
    • 💬 三.共勉

🌱 一.分布式事务之本地事务

🌱 1.1 本地事务 - ACID原则

  本地事务,是指传统的单机数据库事务,必须具备ACID原则:

在这里插入图片描述

  • 原子性(A)

    所谓的原子性就是说,在整个事务中的所有操作,要么全部完成,要么全部不做,没有中间状态。对于事务在执行中发生错误,所有的操作都会被回滚,整个事务就像从没被执行过一样。

  • 一致性(C)

    事务的执行必须保证系统的一致性,在事务开始之前和事务结束以后,数据库的完整性没有被破坏,就拿转账为例,A有1000元,B有1000元,如果在一个事务里A成功转给B500元,那么不管发生什么,那么最后A账户和B账户的数据之和必须是2000元。

  • 隔离性(I)

    所谓的隔离性就是说,事务与事务之间不会互相影响,一个事务的中间状态不会被其他事务感知。数据库保证隔离性包括四种不同的隔离级别:

    • Read Uncommitted(读取未提交内容)
    • Read Committed(读取提交内容)
    • Repeatable Read(可重读)
    • Serializable(可串行化)
  • 持久性(D)

    所谓的持久性,就是说一旦事务提交了,那么事务对数据所做的变更就完全保存在了数据库中,即使发生停电,系统宕机也是如此。

总结:在传统项目中,项目部署基本是单点式:即单个服务器和单个数据库。这种情况下,数据库本身的事务机制就能保证ACID的原则,这样的事务就是本地事务。

🌱 1.2 本地事务 - 事务日志undo和redo

  单个服务与单个数据库的架构中,产生的事务都是本地事务。其中原子性和持久性其实是依靠undo和redo 日志来实现。

InnoDB的事务日志主要分为:

  • undo log(回滚日志,提供回滚操作)

  • redo log(重做日志,提供前滚操作)

🌴 1.2.1 事务日志 - undo log日志

  undo log的原理很简单,为了满足事务的原子性,在操作任何数据之前,首先将数据备份到undo Log日志中,undo Log 记录了此次事务开始前的数据状态;。然后进行数据的修改。如果出现了错误或者用户执行了ROLLBACK语句,系统可以利用Undo Log中的备份将数据恢复到事务开始之前的状态。

undo log 作用

  1. 实现事务原子性,可以用于回滚
  2. 实现多版本并发控制(MVCC)

undo log 原理

在这里插入图片描述

undo log 产生和销毁

  1. undo log在事务开始前产生
  2. 当事务提交之后,undo log 并不能立马被删除,而是放入待清理的链表
  3. 会通过后台线程 purge thread 进行回收处理

总结:undo Log属于逻辑日志,记录一个变化过程。例如执行一个update,undo log会记录一个相反的update;执行一个delete,undo log会记录一个insert;

🌴 1.2.2 事务日志 - redo log日志

  Redo Log记录的是新数据的备份。在事务提交前,只要将Redo Log持久化即可,不需要将数据持久化,减少了IO的次数。

Redo Log: 记录了此次事务**「完成后」** 的数据状态;

Redo log的作用

MySQL实例挂了或宕机了,重启时,InnoDB存储引擎会使用redo log恢复数据,保证数据的持久性与完整性。

Redo Log 的工作原理

在这里插入图片描述

🌴 1.2.3 总结

  1. undo log 记录更新前数据,用于保证事务原子性

  2. redo log 记录更新后数据,用于保证事务的持久性

  3. redo log 写入到buffer缓冲区,事务提交时写入磁盘

  4. redo log 持久化到了硬盘之后,事务可提交

  5. redo log会在事务提交之前,或者redo log buffer满了的时候写入磁盘

  6. 数据写入到内存的redo log日志文件中,不过为了避免出现内存中与磁盘数据不一致的情况,事务提交后也会将内存数据刷入磁盘

🌱 二.总结

  本篇文章主要讲解了本地事务的ACID特性,以及undo log日志和redo log日志的基本概念以及原理,后续为大家讲解分布式事务更多的内容,大家敬请期待呦!!

💬 三.共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

相关文章:

分布式事务之本地事务

🚀 分布式事务 🚀 🌲 AI工具、AI绘图、AI专栏 🍀 🌲 如果你想学到最前沿、最火爆的技术,赶快加入吧✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆&…...

PyTorch 初级教程:构建你的第一个神经网络

PyTorch 是一个在研究领域广泛使用的深度学习框架,提供了大量的灵活性和效率。本文将向你介绍如何使用 PyTorch 构建你的第一个神经网络。 一、安装 PyTorch 首先,我们需要安装 PyTorch。PyTorch 的安装过程很简单,你可以根据你的环境&…...

SpringBoot使用MyBatis Plus + 自动更新数据表

1、Mybatis Plus介绍 Mybatis,用过的都知道,这里不介绍,mybatis plus只是在mybatis原来的基础上做了些改进,增强了些功能,增强的功能主要为增加更多常用接口方法调用,减少xml内sql语句编写,也可…...

【设计模式】简单工厂模式

C语言实现简单的工厂模式 #include <stdio.h> #include <stdlib.h>// 图形类型枚举 typedef enum {CIRCLE,SQUARE,RECTANGLE } ShapeType;// 图形结构体 typedef struct {ShapeType type;float area; } Shape;// 创建圆形 Shape* createCircle() {Shape* circle …...

推荐系统-ALS协同过滤算法实现

从协同过滤的分类来说&#xff0c;ALS&#xff08;Alternating Least Squares&#xff0c;交替最小二乘&#xff09;算法属于User-Item CF&#xff0c;也叫做混合CF&#xff0c;它同时考虑了User和Item两个方面&#xff0c;通过数量相对少的未被观察到的隐藏因子&#xff0c;来…...

QT第三讲

思维导图 蜡笔小新闹钟 需求&#xff1a; 实现 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTime> //时间类 #include<QTimerEvent> //事件处理类 #include<QtTextToSpeech> //文本转语音类 #include<QMessageBo…...

Linux内核的I2C驱动框架详解------这应该是我目前600多篇博客中耗时最长的一篇博客

目录 1 I2C驱动整体框架图 2 I2C控制器 2.1 I2C控制器设备--I2C控制器在内核中也被看做一个设备 2.2 i2c控制器驱动程序 2.3 platform_driver结构体中的probe函数做了什么 2.3.1 疑问&#xff1a; i2cdev_notifier_call函数哪里来的 2.3.2 疑问&#xff1a;为什么有两…...

【点云处理教程】05-Python 中的点云分割

一、说明 这是我的“点云处理”教程的第 5 篇文章。“点云处理”教程对初学者友好&#xff0c;我们将在其中简单地介绍从数据准备到数据分割和分类的点云处理管道。 在上一教程中&#xff0c;我们看到了如何过滤点云以减少噪声或其密度。在本教程中&#xff0c;我们将应用一些聚…...

代码随想录算法训练营之JAVA|第十七天| 654. 最大二叉树

今天是第17天刷leetcode&#xff0c;立个flag&#xff0c;打卡60天。 算法挑战链接 654. 最大二叉树https://leetcode.cn/problems/maximum-binary-tree/description/ 第一想法 错误的想法&#xff0c;就不说了。 看完代码随想录之后的想法 用递归模拟真实的过程 如果我…...

C++重写函数、隐藏函数、重载函数的区别对比

目录 1.函数重载 1.1定义 1.2函数重载的规则&#xff1a; 1.3函数重载的作用&#xff1a; 2.函数重写&#xff1a; 2.1定义 2.2例子&#xff1a; 3.函数隐藏 3.1定义 3.2举个例子&#xff1a; 1.函数重载 1.1定义 我们在学类和对象的封装特性时学过一个词叫重载&#xff0c…...

15.python设计模式【函数工厂模式】

1.知识讲解 内容&#xff1a;定义一个字典&#xff0c;在python中一切皆对象&#xff0c;将所有的函数进行封装&#xff0c;然后定一个分发函数进行分发&#xff0c;将原来if…else全部干掉。角色&#xff1a; 函数&#xff08;function&#xff09;函数工厂&#xff08;funct…...

Redis主从复制、哨兵、cluster集群原理+实验

目录 一、Redis 主从复制 1、主从复制的作用 2、主从复制流程 3、搭建Redis 主从复制 安装Redis&#xff08;所有主机) 修改Master节点Redis配置文件 修改Slave节点Redis配置文件 验证主从效果 一、Redis 主从复制 主从复制&#xff0c;是指将一台Redis服务器的数据&am…...

微信小程序如何实现页面传参?

前言 只要你的小程序超过一个页面那么可能会需要涉及到页面参数的传递&#xff0c;下面我总结了 4 种页面方法。 路径传递 通过在url后面拼接参数&#xff0c;参数与路径之间使用 ? 分隔&#xff0c;参数键与参数值用 相连&#xff0c;不同参数用 & 分隔&#xff1b;如…...

OPC DA 客户端与服务器的那点事

C#开发OPC客户端&#xff0c;使用OPCDAAuto.dll。在开发过程中偶遇小坎坷&#xff0c;主要记录一下问题解决办法。 1、建立客户端&#xff0c;参考链接。建立WinFrom工程&#xff0c;将博客中代码全部复制即可运行&#xff1a; https://www.cnblogs.com/kjgagaga/p/17011730.…...

Java 错误异常介绍(Exceptions)

1、异常介绍 异常是程序执行期间发生的意外事件。它影响程序指令流&#xff0c;从而导致程序异常终止。 发生异常的原因有很多。其中包括&#xff1a; 无效的用户输入 设备故障 网络连接丢失 物理限制&#xff08;磁盘内存不足&#xff09; 代码错误 打开一个不可用的文…...

每日一题——旋转数组的最小数字

题目 有一个长度为 n 的非降序数组&#xff0c;比如[1,2,3,4,5]&#xff0c;将它进行旋转&#xff0c;即把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;变成一个旋转数组&#xff0c;比如变成了[3,4,5,1,2]&#xff0c;或者[4,5,1,2,3]这样的。请问&#xff0c;给定这…...

SpringBoot Jackson 日期格式化统一配置

目录 1.在全局配置文件配置 2.通过JavaBean方式配置 1.在全局配置文件配置 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8 该配置方式仅支持 Date 类型的日期格式化&#xff0c;不支持LocalDate 及 LocalDateTime 的格式化。 2.通过JavaBean方式配置 …...

剑指 Offer 38. 字符串的排列 / LeetCode 47. 全排列 II(回溯法)

题目&#xff1a; 链接&#xff1a;剑指 Offer 38. 字符串的排列 难度&#xff1a;中等 输入一个字符串&#xff0c;打印出该字符串中字符的所有排列。 你可以以任意顺序返回这个字符串数组&#xff0c;但里面不能有重复元素。 示例: 输入&#xff1a;s “abc” 输出&…...

【前端知识】React 基础巩固(四十三)——Effect Hook

React 基础巩固(四十三)——Effect Hook 一、Effect Hook的基本使用 Effect Hook 用来完成一些类似class中生命周期的功能。 在使用类组件时&#xff0c;不管是渲染、网路请求还是操作DOM&#xff0c;其逻辑和代码是杂糅在一起的。例如我们希望把计数器结果显示在标签上&…...

一百三十八、ClickHouse——使用clickhouse-backup备份ClickHouse库表

一、目标 使用clickhouse-backup在本地全库备份ClickHouse的数据库 二、前提 已经安装好clickhouse-backup 注意&#xff1a;由于之前同事已经按照好clickhouse-backup&#xff0c;所以我就没有安装 如有需要请参考其他人的博客安装一下&#xff0c;下面是我认为比较好的一…...

从内存视角拆解float和double:用C语言和调试器带你‘看见’IEEE754的二进制世界

从内存视角拆解float和double&#xff1a;用C语言和调试器带你‘看见’IEEE754的二进制世界 在计算机科学中&#xff0c;浮点数的表示和处理是一个既基础又关键的话题。对于从事系统编程、性能优化或逆向工程的开发者来说&#xff0c;理解浮点数在内存中的实际存储形式不仅能帮…...

Real-ESRGAN-GUI 终极指南:免费AI图像增强工具如何让模糊照片重获高清新生

Real-ESRGAN-GUI 终极指南&#xff1a;免费AI图像增强工具如何让模糊照片重获高清新生 【免费下载链接】Real-ESRGAN-GUI Lovely Real-ESRGAN / Real-CUGAN GUI Wrapper 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN-GUI 你是否曾为模糊的老照片感到无奈&a…...

3个高效方法:免费获取百度网盘高速下载直链的完整指南

3个高效方法&#xff1a;免费获取百度网盘高速下载直链的完整指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 当我们面对百度网盘缓慢的下载速度时&#xff0c;常常感到无…...

ElevenLabs葡萄牙语语音优化黄金7步法:含音频波形对比图、MOS评分提升路径与合规性审查checklist

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs葡萄牙语语音优化的底层逻辑与技术边界 ElevenLabs 对葡萄牙语&#xff08;尤其是巴西葡萄牙语&#xff0c;pt-BR&#xff09;的语音合成并非简单地复用英语模型微调&#xff0c;而是基于多阶…...

本地化AI代码助手LLMDog:模块化框架与开源模型集成实践

1. 项目概述&#xff1a;一个为开发者设计的本地化AI代码助手最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目叫“LLMDog”&#xff0c;作者是doganarif。乍一看这个名字&#xff0c;可能会联想到“AI狗”或者某种宠物&#xff0c;但它的全称其实是“Large Language M…...

设计师速存!Midjourney未公开的风格隐藏开关:--style raw、--s 750、--no texture三者协同作用的神经渲染原理(GPU显存占用下降41%实测)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;设计师速存&#xff01;Midjourney未公开的风格隐藏开关&#xff1a;--style raw、--s 750、--no texture三者协同作用的神经渲染原理&#xff08;GPU显存占用下降41%实测&#xff09; Midjourney v6.1…...

Navis:开源项目标准化开发环境与工具链配置框架实践

1. 项目概述&#xff1a;一个为开发者打造的“导航星图”如果你和我一样&#xff0c;常年混迹在开源项目的海洋里&#xff0c;那么你一定对这种感觉不陌生&#xff1a;面对一个全新的、功能强大的开源工具&#xff0c;兴奋地克隆了仓库&#xff0c;然后……就卡在了第一步。REA…...

Arduino与手机蓝牙通信:nRF8001 BLE模块硬件连接与软件配置全解析

1. 项目概述与核心价值如果你手头有一个Arduino项目&#xff0c;想让它和你的手机“说说话”&#xff0c;比如把传感器数据无线传到手机App上显示&#xff0c;或者用手机App远程控制几个LED灯&#xff0c;那么nRF8001这个蓝牙低功耗&#xff08;BLE&#xff09;模块绝对是你绕不…...

大气层系统深度解析:构建Switch的六层数字防护体系

大气层系统深度解析&#xff1a;构建Switch的六层数字防护体系 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 在Nintendo Switch的定制固件生态中&#xff0c;Atmosphere&#xff08;大气…...

Arm CoreLink PCK-600电源管理套件解析与应用实践

1. Arm CoreLink PCK-600电源控制套件概述在现代SoC设计中&#xff0c;电源管理已经成为一个关键的技术挑战。随着移动设备和物联网应用的普及&#xff0c;如何在保证性能的同时最大限度地降低功耗&#xff0c;成为芯片设计者面临的核心问题。Arm CoreLink PCK-600电源控制套件…...