具有隔离和原子性的MongoDB中的多个更新

时间:2013-10-01 12:41:23

标签: multithreading mongodb updates atomicity transaction-isolation

在我们希望执行多个更新操作的情况下,在MongoDB中是原子的并且处于隔离状态,以便其他进程或线程在这些操作正在进行时不会获取数据。我知道仅在文档级支持原子性和隔离这一事实,锁也维持在db级别。我在上面的情况下有以下查询:

  • 有没有办法我们可以批量隔离地进行多次更新,因为" $ isolated"不适用于集群,而且,findAndModify()适用于单个文档吗?
  • 如何实现并发控制以实现上述情况?
  • 我们可以在这里使用两阶段提交,通过维护一个事务,它会以独立的方式执行吗?
  • 在探索时我发现MongoMVCC用于多版本并发控制,如果有人使用它,请分享您对上述用例的体验。

1 个答案:

答案 0 :(得分:1)

  

我们是否可以批量单独进行多次更新,因为$ isloated不适用于分片,而且,findAndModify()适用于单个文档?

不,$isolated是最接近的事情

  

我们如何进行并发控制以实现上述情况?

你不能,MongoDB通过拆分ACID来实现并发工作。

  

我们可以在这里使用两阶段提交,通过在这里维护一个事务,它会被隔离的方式执行吗?

两阶段提交,不是服务器端的独立事务将无效。

  

在探索时我发现MongoMVCC用于多版本并发控制,如果有人使用它,请分享您对上述用例的体验。

这是用Java编写的,在MongoDB之上,实际上并不是MongoDB本身,也不能代替ACID中的I.此外,MVCC更多地是关于无锁数据库而不是孤立操作。