事务

作者: 金泽祺 | 来源:发表于2019-02-25 16:49 被阅读0次

MySQL事务

事务的ACID属性

  • A原子性:全部执行或者全部不执行
  • C一致性:开始和完成时,数据保持一致性
  • I隔离性:独立执行
  • D持久性:数据的修改是永久性的

并发事务处理的问题

  • 脏读:一个事务查询了另一个事务未提交的数据更新
  • 不可重复读:一个事务重新查询,发现了另一个事务更新的数据
  • 幻读:一个事务重新查询,发现了另一个事务插入的数据
  • 更新丢失:一个事务覆盖了另一个事务的数据更新

事务隔离级别(读数据一致性):

  • 读未提交 read uncommited:脏读,不可重复读,幻读
  • 读已提交 read commited:不可重复读,幻读
  • 可重复读 repeatable read:幻读
  • 可串行化 serializable

MySQL MVCC 多版本并发控制

  • 记录增加两个隐藏列,创建事务版本号,删除事务版本号。
  • 更新的时候删除旧记录,创建新记录。
  • 查询的时候需满足:
    • 创建版本号小于等于事务版本号
    • 删除版本号大于事务版本号

Spring事务的传播行为

传播行为 说明
PROPAGATION_REQUIRED 默认值。如果没有则新建事务,如果有则加入当前事务
PROPAGATION_REQUIRES_NEW 如果没有则新建事务,如果有则挂起当前事务
PROPAGATION_NESTED 如果没有则新建事务,如果有则新建当前事务的子事务
PROPAGATION_SUPPORTS 如果没有则非事务,如果有则加入当前事务
PROPAGATION_NOT_SUPPORTED 如果没有则非事务,如果有则挂起当前事务
PROPAGATION_MANDATORY 如果没有则抛出异常,如果有则加入当前事务
PROPAGATION_NEVER 如果没有则非事务,如果有则抛出异常

分布式事务

CAP理论

  • Consistency一致性, Availability可用性, Partition tolerance分区容错性
  • 一般满足AP,实现最终一致性(不是强一致性)
  • 不考虑网络延迟

BASE理论

  • Basically Available基本可用,Soft sate软状态,Eventually consistent最终一致性
  • 软状态:允许系统中存在中间状态,不影响系统可用性
  • 考虑了网络延迟

本地消息表(异步确保)

  • 消息生产方创建消息表,业务数据,消息数据,发送消息在同一个本地事务里提交
  • 消息消费方消费消息,处理自己的业务逻辑。处理成功,则更新生产方的消息表。处理失败,重试三次。如果是业务逻辑错误,则发送业务补偿消息给生产方,通知生产方回滚事务。
  • 生产方定时扫描本地消息表,超时/失败的消息再发送一遍
  • 消费方需要确保操作的幂等性

一个示例

  • 用户;商品;订单
  • 先生成分布式事务ID
  • 本地事务一: 商品表扣减库存,消息表冻结相应的商品库存,发送消息
  • 本地事务二: 订单表添加新记录
  • 定时任务一:查询商品的消息表,确认订单表里有相应的记录
  • 定时任务二:查询订单表记录,处理超时和已完成

相关文章

  • java事务

    1、java事务介绍 2、JDBC事务 3、JTA事务 1、java事务介绍 java事务分类:JDBC事务、...

  • 事务、MySQL与Python交互、Python 中操作 MyS

    1、事务 事务操作分两种:自动事务(默认)、手动事务 手动事务的操作流程 开启事务:start transacti...

  • 数据库事务书目录

    数据库事务 事务概念 本地事务 全局事务 全局事务的定义 J2EE中全局事务的实现 全局事务的优缺点 基于消息的分...

  • MySQL事务

    MySQL-innodb-事务 事务的特性 事务的生命周期 失败的事务: 事务的控制语句 面试题 事务日志-red...

  • mysql事务隔离机制及其隔离级别、实现原理分析

    目录 事务特性ACID属性 并发事务带来的问题 事务隔离级别 事务实现原理 事务特性ACID属性 事务特性指的就是...

  • MULE事务配置

    在mule的事务可能为jdbc事务,jms事务,xa事务等,多种事务.这里讲解事务的几个动作: 相关的文档:htt...

  • 事务—事务模型

    程序猿基础知识的学习、理解、整理——事务(方方土) 事务,看似很简单,其实很复杂,作为一个程序猿,你对事务到底了解...

  • 事务—XA事务

    程序猿基础知识的学习、理解、整理——事务(方方土) 什么是XA事务?在什么场景下会出现XA事务? @Transac...

  • 事务—事务模式

    程序猿基础知识的学习、理解、整理——事务(方方土) 什么是事务模式?这里提到的事务模式,主要是指在系统设计过程中的...

  • JDK动态代理给Spring事务埋下的坑

    service 模拟动态代理事务 测试类 预测结果模拟事务:开启事务execute doLink模拟事务:关闭事务...

网友评论

      本文标题:事务

      本文链接:https://www.haomeiwen.com/subject/ntvgyqtx.html