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

undo-log

定义

undo - log本质上是一种对数据变更前状态的记录。以数据库操作为例,当执行插入、更新或删除等操作时,undo - log会把操作之前数据的原始状态记录下来。比如,要更新某条订单记录的金额字段,undo - log就会记录更新前这条记录中金额字段的具体值 。

作用

  • 支持事务回滚:在分布式事务中,当某个分支事务需要回滚时,undo - log可以提供数据恢复的依据。比如在一个涉及多个微服务数据库操作的分布式事务里,若其中一个服务的操作需要撤销,就可以依据undo - log将数据恢复到事务执行前的状态,确保数据的一致性。
  • 保证数据一致性:在事务提交过程中,可能会遇到各种异常情况,如网络故障、服务器宕机等。undo - log能在这些异常发生时,帮助系统恢复到事务开始前的状态,避免数据处于不一致的中间状态,从而保证了分布式系统中数据的一致性 。

工作原理

  • 记录阶段:在第一阶段RM(Resource Manager,资源管理器,如数据库)执行具体业务SQL之前,会先将数据变更前的状态记录到undo - log中。例如,执行UPDATE orders SET amount = 1000 WHERE order_id = 1;这条SQL语句,RM会先把order_id = 1这条记录变更前的amount值(假设是800)记录到undo - log中,然后再执行SQL更新操作并提交 。
  • 回滚阶段:如果在事务的第二阶段需要回滚,RM会根据undo - log中记录的信息,反向执行操作来恢复数据。接着上面的例子,如果要回滚,RM会根据undo - log里记录的amount原始值800,执行类似UPDATE orders SET amount = 800 WHERE order_id = 1;的操作,将数据恢复到更新前的状态。
  • 提交阶段:当事务成功提交,意味着所有分支事务都正常执行完毕,此时undo - log就失去了作用,在第二阶段提交时RM会将其删除,以释放存储空间 。

与redo - log对比

redo - log是记录数据变更后的状态,主要用于在系统故障恢复时,将数据恢复到最新的提交状态,保证已提交事务的数据不会丢失。而undo - log是记录数据变更前的状态,用于事务回滚,两者在功能和用途上是互补的 。

应用场景举例

在电商的分布式订单系统中,一次下单操作可能涉及订单服务向订单库插入订单记录,同时库存服务从库存库中扣减相应商品库存。如果在扣减库存操作完成后,插入订单记录失败,此时就可以利用undo - log将库存数据回滚到扣减前的状态,保证整个分布式事务的一致性,避免出现有库存扣减但无订单记录的不合理情况 。

http://www.dtcms.com/a/365284.html

相关文章:

  • 用 “走楼梯” 讲透动态规划!4 个前端场景 + 4 道 LeetCode 题手把手教
  • MySQL的utf8 、utf8mb3 和 utf8mb4 的区别和排序规则
  • 摄像头现代实现WIFI远程实操画面移动
  • Flutter环境搭建全攻略之-Macos环境搭建
  • 【Layui】Layui Table 底部合计栏实现方案
  • CentOS安装vulhub靶场
  • 不同数据类型for循环
  • 从一道面试题开始:如何让同时启动的线程按顺序执行?
  • 物联网能源管控平台建设方案
  • PostgreSQL 技术峰会哈尔滨站活动回顾|深度参与 IvorySQL 开源社区建设的实践与思考
  • FPGA ad9248驱动
  • 计算机视觉(六):腐蚀操作
  • 生产环境中redis的SCAN命令如何替代KEYS命令?
  • 苍穹外卖项目笔记day04--Redis入门
  • ITU-R P.372 无线电噪声预测库调用方法
  • 存算一体:重构AI计算的革命性技术(1)
  • 【LeetCode_283】移动零
  • 配置机载电脑开机自启动ros2节点和配置can0
  • 抗体的应用
  • Mysql学习第五天 Innodb底层原理与Mysql日志机制深入剖析
  • 视频数据如何联网共享?
  • 【底层机制】【C++】vector 为什么等到满了才扩容而不是提前扩容?
  • 编程基础-java开发准备
  • 采用基于模型的方法实现车辆SOA威胁分析自动化
  • 华为云云原生架构赋能:大腾智能加速业务创新步伐
  • HTML第八课:HTML4和HTML5的区别
  • 从零开始学大模型之Transformer 架构
  • 鹧鸪云软件:光伏施工管理一目了然,进度尽在掌握
  • 【Python语法基础学习笔记】类的定义和使用
  • 面试复习题-Flutter场景题