由于MongoDB不支持事务,有没有办法保证事务?
答案 0 :(得分:4)
“担保交易”是什么意思?
MongoDB中有两个类似的conepts;
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页面上写了一个例子和一些解释。