分布式事务之本地事务

在这里插入图片描述

在这里插入图片描述

🚀 分布式事务 🚀

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

🚀 分布式事务 🚀

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

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

💬 三.共勉

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

在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值