是否有任何方法来保证用户端的事务

时间:2011-02-24 03:11:32

标签: mongodb

由于MongoDB不支持事务,有没有办法保证事务?

4 个答案:

答案 0 :(得分:4)

“担保交易”是什么意思?

MongoDB中有两个类似的conepts;

  • 原子操作
  • 使用安全模式/ getlasterror ...

http://www.mongodb.org/display/DOCS/Last+Error+Commands

如果您只是需要知道运行更新时是否出现错误,例如您可以使用文档中的 getlasterror 命令...

  

getlasterror主要用于   写操作(虽然已设置   在命令或查询之后)。写   默认情况下,操作没有   返回代码:这样可以保存客户端   从等待客户端/服务器   写操作期间的转变。   如果是,总是可以调用getLastError   一个人想要一个返回代码。

     

如果您正在向MongoDB写入数据   多个连接,然后它可以   有时候打电话很重要   一个连接上的getlasterror是   确定数据已经存在   致力于数据库。对于   例如,如果你写信给   连接#1并希望这些写入   反映在连接#2的读取中,你可以通过在写入之后调用getlasterror来确保这一点   连接#1。

或者,您可以使用原子操作来处理需要增加值的情况(例如upvote等)更多关于此处:

http://www.mongodb.org/display/DOCS/Atomic+Operations

作为旁注,MySQL的默认存储引擎也没有交易! :) http://dev.mysql.com/doc/refman/5.1/en/myisam-storage-engine.html

答案 1 :(得分:3)

MongoDB仅支持原子操作。在MongoDB的顶级的ACID 意义上,没有办法实现事务。这种交易支持必须在核心中实施。但由于CARP定理,您永远不会看到完整的事务支持。您无法同时拥有速度,耐用性和一致性。

答案 2 :(得分:2)

我认为,当您选择NoSQL解决方案时,这是您选择放弃的事情之一。

如果需要交易,也许NoSQL不适合你。是时候回到ACID关系数据库了。

答案 3 :(得分:2)

不幸的是,MongoDB不支持开箱即用的交易,但实际上你可以在它上面实现ACID乐观交易。我在GitHub页面上写了一个例子和一些解释。