专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 数据库

现时的数据库系统是否还需要事物

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
现在的数据库系统是否还需要事物?

数据库的事物是为了保证几条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的时候在修改数据库之前其实已经修改了缓存里面的值。也就是说事物控制不了数值的正确性了。出现问题也没办法回滚。

 

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

 

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

 

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

1 楼 iTarget 2017-10-08  
弄清楚“事务”和“事物”
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: