【问题标题】:How to achieve rollback in transactions in mongo? [closed]如何在mongo中实现事务回滚? [关闭]
【发布时间】:2014-02-24 13:41:36
【问题描述】:

我在 mongodb 上使用猫鼬。

在来自nodejs express服务器的请求和响应中,通常不需要通过mongoose对mongodb进行查询。

在许多情况下,如果前几个查询成功执行,然后在事务下全部失败,则可能会发生这种情况。

现在我需要将我的数据库状态回滚到数据库的初始状态。

那么我怎样才能在 mongodb 中有效地回滚呢? 请提供一些合适的参考资料。

【问题讨论】:

  • 如果您想适应 MongoDB 功能,“补偿”事务通常是一个有用的选项。在这种情况下,它会“撤消”所做的任何更改。
  • 查询不会更改文档。你到底想回滚什么?

标签: node.js mongodb express transactions mongoose


【解决方案1】:

我同意赫克托的观点。如果您需要多个文档事务,那么 Mongo 可能不适合您。您可以将数据结构嵌入到单个文档中吗?然后你可以得到你正在寻找的回滚。

另一种选择是查看 Mongo 克隆 TokuMX,它提供跨多个文档的事务。

【讨论】:

【解决方案2】:

浏览 mongo 教程

这是我找到的用于进行两阶段提交的链接(可能无法保证):

http://docs.mongodb.org/manual/tutorial/perform-two-phase-commits/

【讨论】:

    【解决方案3】:

    MongoDB 中不支持传统的 ACID 数据库事务,无论您在其上放置什么。这不是 Mongoose 或 Express.js 的问题,而是 MongoDB 的特性。

    MongoDB 支持原子操作,这意味着保存到集合可以保证完全成功或失败,换句话说,您不会对集合中的单个文档进行部分更新。但是不支持在单个事务中进行多次更新。

    http://docs.mongodb.org/manual/faq/fundamentals/#does-mongodb-support-transactions

    【讨论】:

    • 有没有办法管理这些多查询事务的回滚??
    • 如果你真的需要这个,我建议你重新考虑一下 MongoDB 是否是你项目的正确选择。也许您应该使用开箱即用的支持此功能的传统关系数据库。
    猜你喜欢
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多