Pet*_*sik 28
不同之处在于,一阶段提交通常在一个系统或数据库中使用,而两阶段提交用于跨多个DB或系统的分布式事务.让我举几个简单的例子
单阶段提交
BEGIN
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );
COMMIT;
Run Code Online (Sandbox Code Playgroud)
这是用PL/SQL编写的经典原子事务(对于Java EE世界,想象一下EJB方法也可以是事务性的),只有一个阶段执行所有操作并进行提交或回滚.
两阶段提交
//pseodocode
BEGIN
UPDATE db1; //updates DB on another machine
UPDATE someCloudStorage; //update something on the cloud
INSERT INTO SomeTable VALUES(...);
COMMIT;
Run Code Online (Sandbox Code Playgroud)
现在,您正在处理不同计算机上的不同系统,但您希望成功写入所有系统或失败(这就是为什么它是分布式事务).所以这里是两阶段提交协议.基本上,事务管理器广播"准备提交"消息,然后等待每台机器的OK响应.如果每个人都说它"没问题",那么一切都会被提交 - 如果没有,所有交易都会被回滚.
请注意,如果要在Java中使用XA事务,则需要具有XA支持的JDBC驱动程序(以及正确配置的XA数据源).
| 归档时间: |
|
| 查看次数: |
9744 次 |
| 最近记录: |