【问题标题】:"Atomic section" in Ruby MongoDB driver?Ruby MongoDB 驱动程序中的“原子部分”?
【发布时间】:2010-11-17 13:56:32
【问题描述】:

有没有办法在 MongoDB 服务器(使用 Ruby 驱动程序)上执行一组非原子操作作为单个原子操作?我需要的基本上是锁定某些对象/集合。

【问题讨论】:

    标签: ruby atomic mongodb rowlocking


    【解决方案1】:

    因为您可以对单个文档执行原子操作,所以有多种方法可以模拟您想要的。见这篇文章:

    http://kylebanker.com/blog/2010/06/07/mongodb-inventory-transactions/

    关于这些想法背后的一些原则,请参阅以下内容:

    http://www.eaipatterns.com/docs/IEEE_Software_Design_2PC.pdf

    【讨论】:

    • 问题是,如果出现“错误”,即发生错误,这会很好地工作。但是,我更担心没有错误,没有错误,从应用程序的角度来看数据很好,但对用户来说是错误的情况。当我们部署到 Heroku 时,我什至不能确定如果用户向我们发送了两个请求,这两个请求是否会按照发送时的顺序进行处理(每个都可以分配给不同的测功机,每个都可以在无效但技术上正确/可能的数据集上进行处理)。不太可能,不是关键,但让我害怕:)
    【解决方案2】:

    在 Ruby 驱动程序中无法执行此操作,因为在 MongoDB 中无法执行此操作。 Mongo 仅支持单文档原子操作。所以基本上单个文档的插入、更新或删除是原子完成的,而不是跨多个文档的操作。

    如果发生错误,您可以通过尝试手动“回滚”来伪造交易。在这种情况下,回滚将用以前的值替换任何更改。但这将是手动的,并且没有您从大多数 SQL 服务器获得的 ACID 保证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      相关资源
      最近更新 更多