现在的数据库系统是否还需要事务?
程序员文章站
2022-01-22 10:04:55
...
数据库的事务是为了保证几条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的时候在修改数据库之前其实已经修改了缓存里面的值。也就是说事物控制不了数值的正确性了。出现问题也没办法回滚。
这确实是一个复杂的问题,因为数据出现在缓存系统和数据库系统两个地方。 数据库系统就算有事物可以回滚,但是不会影响到缓存系统里面的数据。也就是说就算数据库操作正常,在缓存的时候有可能出错导致缓存的数据与数据库数据不一致的问题。
针对这个问题,当然也是有解决办法的。就是对业务数据针对的处理。重要数据不仅仅要确保数据库里面能回滚。缓存系统也要能同步回滚。两者同时操作成功否则同时回滚。
而对于大部分其他一般的业务,数据库事务作用已经名存实亡了。
上一篇: 更快的线程池??
下一篇: spring cache 拓展
推荐阅读
-
宫颈糜烂不是过了手术就行,还需要调养,现在了解下宫颈糜烂食疗的注意事项
-
PHP的pear是干啥的?我们现在还需要学习么?
-
segmentfault.com 这样的程序是否有开源的提供?感觉现在很多类似的程序出现。。
-
做嵌入式c的现在想转php是否合适?
-
做嵌入式c的现在想转php是否合适?
-
宫颈糜烂不是过了手术就行,还需要调养,现在了解下宫颈糜烂食疗的注意事项
-
segmentfault.com 这样的程序是否有开源的提供?感觉现在很多类似的程序出现。。
-
苹果削皮吃还需要洗吗,爱吃苹果的你是否关注
-
为什么知乎没有选择 Ruby, Java 等现在流行的语言而用了 Python? 加上 Twitter 也从 Ruby on Rails 迁到 Java,这是否说明还是成熟的技术靠谱?
-
为什么知乎没有选择 Ruby, Java 等现在流行的语言而用了 Python? 加上 Twitter 也从 Ruby on Rails 迁到 Java,这是否说明还是成熟的技术靠谱?