猿问

springboot-mongodb如何确保如下情况没有脏读

有A,B两个集合,进行以下事务:
1.先查询A集合得到文档转化成java对象
2.在内存中用java代码对对象进行修改后执行MongoTemplate的save操作
3.最后在B集合中再进行一次update操作。
以上过程中的疑惑在于,两个线程t1,t2同时进行完该事务的步骤1,进行更改后t1先写锁更改了文档,那么t2得到的数据就是脏数据,此时t1释放锁,t2执行save,数据库的数据就存在了问题,这样的情况该如何处理?
目前我能想到的方法只有java的synchronized锁住这整个方法,但是在其他方法中对A集合查询仍然会出现相同的脏数据问题,所以想请教各位有什么好的建议,我是Android开发,刚刚入门服务器,麻烦方案解释的简单点哈,谢谢

神不在的星期二
浏览 1365回答 2
2回答

慕侠2389804

跟其他数据库一样,使用update方法,只更新你想更新的字段,而不是所有字段。使用updateFirst或updateMulti。

HUH函数

save这样粗暴地把所有字段更新进去,不但造成你说的问题,还会使每次参与更新的字段多于必要,造成不必要的服务器端压力和oplog压力。
随时随地看视频慕课网APP

相关分类

MongoDB
我要回答