分布式事务之本地事务

news2024/11/18 6:24:17

在这里插入图片描述

在这里插入图片描述

🚀 分布式事务 🚀

🌲 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日志的基本概念以及原理,后续为大家讲解分布式事务更多的内容,大家敬请期待呦!!

💬 三.共勉

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

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

大数据课程E1——Flume的概述

文章作者邮箱:yugongshiyesina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Ganglia的概念; ⚪ 了解Ganglia的拓扑结构和执行流程; ⚪ 掌握Ganglia的安装操作; 一、简介 1. 概述 1. Flume原本是由Cloude…

国内外遥感数据处理软件对比

1.国内遥感数据处理软件概况 1.1北京航天宏图信息技术股份有限公司 1.1.1公司简介 航天宏图信息技术股份有限公司成立于2008年,是国内遥感和北斗导航卫星应用服务商,致力于卫星应用软件国产化、行业应用产业化、应用服务商业化,研发并掌握了具有完全自主知识产权的PIE(Pix…

C# 2的幂

231 2的幂 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2x ,则认为 n 是 2 的幂次方。 示例 1: 输入:n 1 输出&a…

【RabbitMQ】之消息的可靠性方案

目录 一、数据丢失场景二、数据可靠性方案 1、生产者丢失消息解决方案2、MQ 队列丢失消息解决方案3、消费者丢失消息解决方案 一、数据丢失场景 MQ 消息数据完整的链路为:从 Producer 发送消息到 RabbitMQ 服务器中,再由 Broker 服务的 Exchange 根据…

平面设计软件都有哪些?推荐这7款

优秀的平面广告设计可以给产品带来良好的效益,正确传播品牌的价值和色调,而功能强大、使用方便的平面广告设计软件是创造优秀平面广告设计的关键。本文推荐7款备受好评的平面广告设计软件,易于使用! 1.即时设计 即时设计是国内一…

HCIP OSPF+BGP综合实验

题目 1、该拓扑为公司网络,其中包括公司总部、公司分部以及公司骨干网,不包含运营商公网部分。 2、设备名称均使用拓扑上名称改名,并且区分大小写。 3、整张拓扑均使用私网地址进行配置。 4、整张网络中,运行OSPF协议或者BGP协议…

jmeter压力测试指标解释

目录 RT(response time) Throughput 吞吐量 并发用户数 QPS (query per seconds) TPS (transition per seconds) PV和UV 聚合报告: RT(response time) 什么是RT? RT就是指系统在接收到请求和做出相应这段时间跨度 但是值得一提的是RT的值越高,并不真的就能…

性能测试必备监控技能linux篇

前言 如果性能测试的目标服务器是linux系统,在如何使用linux自带的命令来实现性能测试过程的监控分析呢? 对于日常性能测试来讲,在linux下或是类Unix系统,我们必须掌握以下常用的指标查看命令。 ps pstree top free vmstat …

Springboot配置文件数据项加密

1 添加依赖 <!-- jasypt-spring-boot-starter --> <dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.2</version> </dependency> 2 加密数…

华为数通HCIA-网络参考模型(TCP/IP)

网络通信模式 作用&#xff1a;指导网络设备的通信&#xff1b; OSI七层模型&#xff1a; 7.应用层&#xff1a;由应用层协议&#xff08;http、FTP、Telnet.&#xff09;为应用程序产生对应的数据&#xff1b; 6.表示层&#xff1a;将应用层产生的数据转换成网络设备看得懂…

CloudDriver一款将各种网盘云盘挂在到电脑本地变成本地磁盘的工具 教程

平时我们的电脑可能由于大量的文件资料之类的导致存储空间可能不够&#xff0c;所以我们可以选择将网盘我们的本地磁盘用来存放东西。 CloudDrive 是一款可以将 115、阿里云盘、天翼云盘、沃家云盘、WebDAV 挂载到电脑中&#xff0c;成为本地硬盘的工具&#xff0c;支持 Window…

Day10-作业(SpringBootWeb案例)

作业1&#xff1a;完成课上预留给大家自己完成的功能 【部门管理的修改功能】 注意&#xff1a; 部门管理的修改功能&#xff0c;需要开发两个接口&#xff1a; 先开发根据ID查询部门信息的接口&#xff0c;该接口用户查询数据并展示 。(一定一定先做这个功能) 再开发根据ID…

543. 二叉树的直径

题目 题解一 遍历每一个节点&#xff0c;以每一个节点为中心点计算最长路径&#xff08;左子树边长右子树边长&#xff09;&#xff0c;更新全局变量max。 class Solution {int maxd0;public int diameterOfBinaryTree(TreeNode root) {depth(root);return maxd;}public int …

苍穹外卖--公共字段自动填充

问题分析 代码冗余&#xff0c;且不便于后期维护。 实现思路 技术点&#xff1a;枚举&#xff0c;注解&#xff0c;AOP&#xff0c;反射 1.自定义注解AutoFill 1.在sky-server.com.sky包下建立annotation&#xff08;注解&#xff09;包 2.在该包下建立注解AutoFill package co…

软件测试员,面试常见的18个问题(记得收藏!)

软件测试面试18个常见问题汇总 Q1&#xff1a;项目中相关需求问题&#xff0c;测试可以直接和客户沟通吗&#xff1f; A1&#xff1a;可以&#xff0c;最初与客户沟通需求时&#xff0c;测试人员直接参与&#xff0c;所以我们可以直接和客户方的代表开会进行沟通。 A2&#xff…

Apipost教程?一篇文章玩转Apipost

你是否经常遇到接口开发过程中的各种问题&#xff1f;或许你曾为接口测试与调试的繁琐流程而烦恼。不要担心&#xff01;今天我将向大家介绍一款功能强大、易于上手的接口测试工具——Apipost&#xff0c;并带你深入了解如何玩转它&#xff0c;轻松实现接口测试与调试。 什么是…

SQL-每日一题【1173. 即时食物配送 I】

题目 配送表: Delivery 如果顾客期望的配送日期和下单日期相同&#xff0c;则该订单称为 「即时订单」&#xff0c;否则称为「计划订单」。 查询即时订单所占的百分比&#xff0c; 保留两位小数。 查询结果如下所示。 示例 1: 解题思路 1.题目要求我们查询出顾客期望的配送日…

大数据开发面试必问:Hive调优技巧系列一

Hive必问调优 Hive 调优拆解:Hive SQL 几乎是每一位互联网分析师的必备技能&#xff0c;相信很多小伙伴都有被面试官问到 Hive 优化问题的经历。所以掌握扎实的 HQL 基础尤为重要&#xff0c;hive优化也是小伙伴应该掌握的一项技能&#xff0c;本篇文章具体从hive建表优化、HQ…

我求求你不要再问我SpringBoot的自动配置原理了!

目录 四、SpringBoot自动配置原理 4.1 起步依赖原理 4.1.1 版本锁定 4.1.2 起步依赖 4.2 自动配置原理 4.2.1 SpringBootApplication源码 4.2.2 SpringBootConfiguration源码 4.2.3 EnableAutoConfiguration源码 1&#xff09;Registrar 2&#xff09;AutoConfigurat…

SQL SERVER使用发布订阅同步数据库遇到的坑

可能遇到的各种坑 1.在执行 xp_cmdshell 的过程中出错。调用 ‘CreateProcess’ 失败&#xff0c;错误代码: ‘5’ 网上有各种解决办法&#xff0c;包括改本地安全策略&#xff0c;将sql server服务的网络权限改为本机系统&#xff0c;改cmd用户的读写权限&#xff0c;退出360…