🚀 分布式事务 🚀 |
🌲 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 作用
- 实现事务原子性,可以用于回滚
- 实现多版本并发控制(MVCC)
undo log 原理
undo log 产生和销毁
- undo log在事务开始前产生
- 当事务提交之后,undo log 并不能立马被删除,而是放入待清理的链表
- 会通过后台线程 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 总结
-
undo log 记录更新前数据,用于保证事务原子性
-
redo log 记录更新后数据,用于保证事务的持久性
-
redo log 写入到buffer缓冲区,事务提交时写入磁盘
-
redo log 持久化到了硬盘之后,事务可提交
-
redo log会在事务提交之前,或者redo log buffer满了的时候写入磁盘
-
数据写入到内存的redo log日志文件中,不过为了避免出现内存中与磁盘数据不一致的情况,事务提交后也会将内存数据刷入磁盘
🌱 二.总结
本篇文章主要讲解了本地事务的ACID特性,以及undo log日志和redo log日志的基本概念以及原理,后续为大家讲解分布式事务更多的内容,大家敬请期待呦!!
💬 三.共勉
最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉! |