首页 > 其他分享 >两阶段提交和TCC模式的区别

两阶段提交和TCC模式的区别

时间:2023-02-09 22:01:55浏览次数:46  
标签:事务 return 区别 public 提交 transactionId 执行 TCC

两阶段提交和TCC模式的区别

一、两阶段提交 两阶段提交是一种原子性操作,它有两个阶段:第一阶段是“预提交”阶段,第二阶段是“提交”阶段。在第一阶段,系统会验证事务是否可以执行,如果可以执行,则系统会将事务状态标记为“预提交”,这样客户端就可以放心地执行第二阶段的“提交”操作,这样就保证了事务的原子性。

二、TCC模式 TCC模式也是原子性操作,但它有三个阶段:第一阶段是“尝试”阶段,第二阶段是“确认”阶段,第三阶段是“取消”阶段。在第一阶段,系统会验证事务是否可以执行,如果可以执行,则系统会将事务状态标记为“尝试”;在第二阶段,客户端会根据第一阶段的结果,决定是否执行第二阶段的“确认”操作,如果决定执行,则事务就会成功提交;如果不执行,则客户端会执行第三阶段的“取消”操作,这样就保证了事务的原子性。

 

 

 

两阶段提交java代码实现

//定义事务
public class Transaction {
    //记录事务状态
    private boolean isCommitted;
    //记录事务ID
    private int transactionId;
 
    public Transaction(int transactionId) {
        this.transactionId = transactionId;
        this.isCommitted = false;
    }
 
    //尝试预提交事务
    public boolean tryPreCommit() {
        //验证事务是否可以执行
        if (checkTransaction()) {
            //如果可以执行,则将事务状态标记为“预提交”
            isCommitted = true;
            return true;
        }
        return false;
    }
 
    //提交事务
    public boolean commit() {
        //如果事务状态为“预提交”,则执行提交操作
        if (isCommitted) {
            //执行提交
            //……
            return true;
        }
        return false;
    }
 
    //验证事务是否可以执行
    private boolean checkTransaction() {
        //根据transactionId查询数据库,验证事务是否可以执行
        //……
        return true;
    }
}

TCC模式java代码实现

//定义事务
public class Transaction {
    //记录事务状态
    private int status;
    //记录事务ID
    private int transactionId;
 
    public Transaction(int transactionId) {
        this.transactionId = transactionId;
        this.status = 0;
    }
 
    //尝试预提交事务
    public boolean tryPreCommit() {
        //验证事务是否可以执行
        if (checkTransaction()) {
            //如果可以执行,则将事务状态标记为“尝试”
            status = 1;
            return true;
        }
        return false;
    }
 
    //确认提交事务
    public boolean confirm() {
        //如果事务状态为“尝试”,则执行确认操作
        if (status == 1) {
            //执行确认
            //……
            return true;
        }
        return false;
    }
 
    //取消提交事务
    public boolean cancel() {
        //如果事务状态为“尝试”,则执行取消操作
        if (status == 1) {
            //执行取消
            //……
            return true;
        }
        return false;
    }
 
    //验证事务是否可以执行
    private boolean checkTransaction() {
        //根据transactionId查询数据库,验证事务是否可以执行
        //……
        return true;
    }
}

 

 

标签:事务,return,区别,public,提交,transactionId,执行,TCC
From: https://www.cnblogs.com/deepalley/p/17107277.html

相关文章