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开发,刚刚入门服务器,麻烦方案解释的简单点哈,谢谢

阅读 2.6k
1 个回答

跟其他数据库一样,使用update方法,只更新你想更新的字段,而不是所有字段。使用updateFirstupdateMulti。save这样粗暴地把所有字段更新进去,不但造成你说的问题,还会使每次参与更新的字段多于必要,造成不必要的服务器端压力和oplog压力。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题