【发布时间】:2010-11-17 13:56:32
【问题描述】:
有没有办法在 MongoDB 服务器(使用 Ruby 驱动程序)上执行一组非原子操作作为单个原子操作?我需要的基本上是锁定某些对象/集合。
【问题讨论】:
标签: ruby atomic mongodb rowlocking
有没有办法在 MongoDB 服务器(使用 Ruby 驱动程序)上执行一组非原子操作作为单个原子操作?我需要的基本上是锁定某些对象/集合。
【问题讨论】:
标签: ruby atomic mongodb rowlocking
因为您可以对单个文档执行原子操作,所以有多种方法可以模拟您想要的。见这篇文章:
http://kylebanker.com/blog/2010/06/07/mongodb-inventory-transactions/
关于这些想法背后的一些原则,请参阅以下内容:
http://www.eaipatterns.com/docs/IEEE_Software_Design_2PC.pdf
【讨论】:
在 Ruby 驱动程序中无法执行此操作,因为在 MongoDB 中无法执行此操作。 Mongo 仅支持单文档原子操作。所以基本上单个文档的插入、更新或删除是原子完成的,而不是跨多个文档的操作。
如果发生错误,您可以通过尝试手动“回滚”来伪造交易。在这种情况下,回滚将用以前的值替换任何更改。但这将是手动的,并且没有您从大多数 SQL 服务器获得的 ACID 保证。
【讨论】: