`
panshaobinSB
  • 浏览: 198206 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

全局事务的提交

 
阅读更多
全局事务怎么做呢?
JPA.getUserTransaction().begin(); 首先要全局事务的API,不需要我们编写,通常容器已经提供给我们了,
我们只需要begin一下
connection = mysql 连接mysql
connection2 = oracle 连接oracle
connection--> update mysql_table set amount=amount-xx where id=aaa 发生扣钱,假设是在mysql数据
库扣钱的。
connection2--> update oracle_table set amount=amount+xx where id=bbb 发生在oracle数据库
JPA.getUserTransaction().commit();
那么它是怎么知道事务该提交还是回滚呢?
这时候它使用了二次提交协议。二次提交协议简单说就这样:如果你先执行第一条语句,执行的结果先预提交
到数据库,预提交到数据库了,数据库会执行这条语句,然后返回一个执行的结果,这个结果假如我们用布尔
值表示的话,成功就是true,失败就是false.然后把执行的结果放入一个(假设是List)对象里面去,接下来再
执行第二条语句,执行完第二条语句之后(也是预处理,数据库不会真正实现数据的提交,只是说这条语句送
到数据库里面,它模拟下执行,给你返回个执行的结果),假如这两条语句的执行结果在List里面都是true的
话,那么这个事务就认为语句是成功的,这时候全局事务就会提交。 二次提交协议,数据库在第一次提交这个
语句时,只会做预处理,不会发生真正的数据改变,当我们在全局事务提交的时候,这时候发生了第二次提
交,那么第二次提交的时候才会真正的发生数据的改动。
如果说在执行这两条语句中,有一个出错了,那么List集合里就有个元素为false,那么全局事务就认为你这
个事务是失败的,它就会进行回滚,回滚的时候,哪怕你的第二条语句在第一次提交的时候是成功的,它在第
二次提交的时候也会回滚,那么第一次的更改也会恢复到之前的状态,这就是二次提交协议。(可以查看一下
数据库方面的文档来了解二次提交协议)
分享到:
评论

相关推荐

    分布式事务、spring cloud \微服务

    TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器:定义全局事务的范围:开始全局事务、提交或回滚全局事务。 RM ...

    SpringCloud Alibaba使用(四) - seata分布式事务.zip

    Transaction Coordinator(TC) :事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚; Transaction Manager(TM) :控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚...

    修改Seata是一款开源的分布式事务解决方案

    Transaction Coordinator(TC) :事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚; Transaction Manager(TM) :控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚...

    论文研究-多数据库中间件中分布异构数据缓冲区系统的实现.pdf

    实现了多数据库中间件中分布异构数据缓冲区,该模型能够实现分布异构数据对象的数据双向同步/异步更新机制;...实现了全局事务管理策略,包括局部代理的设计、全局事务的并发控制、全局事务提交协议等。

    seata-0.8.1.zip

    Transaction Manager(TM):事务管理器,用于开启全局事务、提交或者回滚全局事务,是全局事务的开启者。 Resource Manager(RM):资源管理器,用于分支事务上的资源管理,向TC注册分支事务,上报分支事务的状态,...

    MySQL5.6-Replicate架构图(高清)

    MySQL5.6 Replicate 架构图,...我们可以知道GTID(全局事务 ID) 的官方定义是:GTID实际上是由UUID+TID组成的,其中UUID是一个MySQL实例的唯一标识,TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。)

    springcloud seata-at linux普通 快速配置迁移

    1、TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的ID。 2、XID 在微服务调用链路的上下文中传播。 3、RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖。 4、TM 向 TC 发起针对XID的...

    分布式事务思想和分布式系统入门.txt

    交易中间件与数据库通过 XA 接口规范,使用两阶段提交来完成一个全局事务, XA 规范的基础是两阶段提交协议。 第一阶段是表决阶段,所有参与者都将本事务能否成功的信息反馈发给协调者;第二阶段是执行阶段,协调者...

    一种多粒度集群数据库并发控制新算法 (2010年)

    为保证集群系统中全局事务的...此外,还改进了一种以事务提交图为中心的并发事务调度算法来保证全局事务的可串行化提交,实验结果表明,该算法有效地提高了全局事务执行的并发度,增加了事务吞吐率和减少了响应时间。

    张文-TDSQL全局一致性读技术详解1

    引入全局事务ID分布式事的两阶段提交分布式事务&非分布式事务TDSQL 全局一致性读特性对于prepare记录需要做到尽可能减少阻塞select请求的场景为了减

    seata-0.8.1:seata原始码解析-源码解析

    Seata:简单的可扩展的自主事务架构 什么是西塔? 高性能且易于使用的分布式事务解决方案,可用于微服务体系结构。... 事务管理器TM:定义全局事务的范围:开始全局事务,提交或回滚全局事务。 资源管理

    seata:Seata是一种易于使用,高性能,开源的分布式交易解决方案

    Seata:简单的可扩展自治事务架构 什么是西塔? 高性能且易于使用的分布式事务解决方案,可用于微服务架构。... 事务管理器TM:定义全局事务的范围:开始全局事务,提交或回滚全局事务。 资源管理器(RM):

    xaplus-engine:基于XA和XA +协议的事务处理引擎

    首先,要实现全局事务,引擎将与资源管理器通过XA协议(请参见1)配合使用,以控制应用程序事务的生命周期。 这是两阶段协议,其中包含准备事务和决定提交/回滚的步骤。 接下来,引擎使用XA +接口(请参阅2)与...

    交易中间件设计与实现

    交易中间件是一种复杂的中间件产品,是针对复杂环境下分布式应用的速度和可靠性要求而实现的。...常见的功能包括全局事务协调、事务的分布式两段提交、资源管理器支持、故障恢复、高可靠性、网络负载平衡等。

    分布式事务实践 解决数据一致性

    还有XA以及两阶段提交,并通过实例演示了使用JTA,通过两阶段提交,实现多数据源的事务实现。... 4-1 Spring事务机制_基本接口 4-2 Spring事务机制_实现 4-3 Jpa事务实例 4-4 Jms事务原理 4-5 Jms-session事务实例 4...

    MySQL从库维护经验分享

    前言: MySQL 主从架构应该是最常用的一组架构了。...其中 server_uuid 是一个 MySQL 实例的唯一标识, transaction_id 代表了该实例上已经提交的事务数量,并且随着事务提交单调递增,所以 GTID 能够

    后端开发常见面试题php面试题及答案超详细

    基础题: 1.表单中 get与post提交方法的区别? 答:get是发送请求HTTP协议通过url参数传递进行接收,...事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。

    数据库中的事务、存储过程和触发器的简单使用

     事务提交:COMMIT TRANSACTION  事务回滚:ROLLBACK TRANSACTION  判断某条语句执行是否出错:  全局变量@@ERROR;  @@ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有...

    消除分布式事务的方法

    由于数据量的巨大,大部分Web应用都需要部署很多个数据库实例。这样,有些用户操作就可能需要去修改多个数据库实例中的数据。传统的解决方法是使用分布式事务保证数据的全局一致性,经典的方法是使用两阶段提交协议^

    mysql多版本并发控制MVCC的实现

    修改事务提交方式(是否自动提交,mysql默认自动提交) SET AUTOCOMMIT = 1; //自动提交,为0手动提交 不同数据库引擎MVCC模式各不相同,典型有乐观和悲观并发控制。 innodb 说明: InnoDB的MVCC,是通过在每行...

Global site tag (gtag.js) - Google Analytics