现在的数据库系统是否还需要事务?

数据库的事务是为了保证几条sql能同时执行成功,如果其中一部分产生错误会回滚操作。保证数据的安全。

 

但是现在的系统数据层已经不只是依靠数据库来处理数据了,往往会加入缓存系统。对数据的处理产生了干扰,已经不全由数据库来决定了。

 

例如:

public void addGold(User user1,User user2,int gold){

user1.setGold(user1.getGold+gold);

user2.setGold(user2.getGold-gold);

dao.updateUser(user1);

dao.updateUser(user2);

}

 

采用事物是能保证这个业务不会出错。

但是现在大部分 系统都会用aop的方式在updateUser上加入缓存操作。而不是手动控制update

所以updateUser的时候在修改数据库之前其实已经修改了缓存里面的值。也就是说事物控制不了数值的正确性了。出现问题也没办法回滚。

 

这确实是一个复杂的问题,因为数据出现在缓存系统和数据库系统两个地方。 数据库系统就算有事物可以回滚,但是不会影响到缓存系统里面的数据。也就是说就算数据库操作正常,在缓存的时候有可能出错导致缓存的数据与数据库数据不一致的问题。

 

针对这个问题,当然也是有解决办法的。就是对业务数据针对的处理。重要数据不仅仅要确保数据库里面能回滚。缓存系统也要能同步回滚。两者同时操作成功否则同时回滚。

 

而对于大部分其他一般的业务,数据库事务作用已经名存实亡了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值