【问题标题】:Multiple Updates in MongoDB with Isolation and Atomicity具有隔离性和原子性的 MongoDB 中的多个更新
【发布时间】:2013-10-01 12:41:23
【问题描述】:

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

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

【问题讨论】:

  • 我认为下面我的回答的 tl;dr 是,如果你想要 ACID,你需要 ACID 技术

标签: multithreading mongodb updates atomic transaction-isolation


【解决方案1】:

有没有一种方法可以单独、批量地进行多次更新,因为 $isloated 不适用于分片,而且 findAndModify() 适用于单个文档?

不,$isolated 是最接近的东西

我们如何做并发控制来实现上述情况?

你不能,MongoDB 自己的并发是通过分离 ACID 的 I 来工作的。

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

两阶段提交,不是服务器端的隔离事务将不起作用。

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

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

【讨论】:

    猜你喜欢
    • 2018-03-17
    • 2011-08-27
    • 2011-07-28
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多