2010-11-17 62 views

回答

0

在Ruby驱动程序中没有办法做到这一点,因为在MongoDB中没有办法做到这一点。 Mongo仅支持单文档原子操作。所以基本上,一个文档的插入,更新或删除是以原子方式完成的,而不是跨多个文档的操作。

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

1

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

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

而对于一些想法有背后的原理,看到这样一句:

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

+0

的事情是,这个效果很好,如果事情“出错”,即发生错误。但是,我更担心的是没有错误,没有错误,从应用程序的角度来看数据没有问题,但它们对用户来说是错误的。而当我们部署到Heroku时,我甚至无法确定如果用户向我们发送了两个请求,那么这两个请求将按照它们发送的相同顺序处理(每个请求可以被分配到不同的测试仪,每个可以在无效时处理,但技术上正确/可能的数据集)。不太可能,不要批评,但是让我失望:) – PJK 2010-11-18 22:30:03