mongodb - 确保将数据保存在不同集合中的策略,例如应用程序级别的事务

Posted

技术标签:

【中文标题】mongodb - 确保将数据保存在不同集合中的策略,例如应用程序级别的事务【英文标题】:mongodb - strategy to ensure save data in different collections like a transaction at application level 【发布时间】:2012-04-09 09:16:50 【问题描述】:

我与 mongodb 合作,我想一个可能的策略来将数据保存在不同的集合中,例如 2 个集合。但是,就像事务系统一样,我想确保数据存在于 collection1 和 collection2 中,或者什么都不存在。

实际上,我希望在执行某些操作时跟踪在我的应用程序中执行的操作。因此,例如当我的应用程序保存数据时,我还想保存它已经执行了插入操作,当修改数据时,我想要跟踪修改操作等。

这些操作数据可以保存为单个集合的嵌入文档。例如,如果我尝试将数据保存到 collection1 中,那么我可以将“插入操作数据”保存在与嵌入文档相同的 collection1 中。如果我尝试将数据修改为 collection2 那么我可以将“修改操作数据”保存在与嵌入文档相同的 collection2 中,依此类推... 因此,当我想检索“操作嵌入文档数据”时,我必须查询 collection1、collection2、collection3 等。 我认为那很昂贵。进一步的collection1,collection2,collection3已经被应用程序强调了,所以我不想再强调了。

或者,我可以将“操作数据”保存在单独的集合中,例如“oper_coll”集合名称。所以我只能查询“oper_coll”来检索“操作数据”,但这意味着当我在 collection1 中保存数据时,我必须将“操作数据”保存在“oper_coll”中以跟踪当前操作。我希望数据正确保存在 collection1 中并在 oper_coll 中进行操作。如果出现问题,它什么也不做,数据不会出现在任何一个集合( collection1 和 oper_coll )中。所以我需要一个应用程序级别的事务系统,因为我知道 mongodb 不支持事务。

所以我想在应用程序级别实现类似的东西,因为我需要将 data1 保存到 collection1 中,如果没问题,它将 data2 保存到 collection2 中。如果出现问题,则全部回滚。

你有什么想法吗?

【问题讨论】:

【参考方案1】:

首先我认为这个链接会有所帮助,它提供了一个如何使用 mongo 编排 2 阶段提交的示例。

http://cookbook.mongodb.org/patterns/perform-two-phase-commits/

根据链接中的示例和围绕该主题的一些额外阅读,我使用工作单元设计模式创建了一个 mongo 样式事务。

这有帮助吗?

【讨论】:

你过得怎么样?我使用 2pc 技术将事务数据连同 id、日期时间、状态等一起写入事务集合,然后您可以处理事务并在过程中出现任何故障时手动处理回滚。您还可以重试事务,因为您已将其写入数据库作为挂起。在 mongo 中,您可以自动更新单个文档。

以上是关于mongodb - 确保将数据保存在不同集合中的策略,例如应用程序级别的事务的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mongodb 事务中测试翻转功能

MongoDB - 如何确保多次更新都成功?

Mongodb:在 RAM 中保存经常写入的集合

如何将上传的图像保存到 MongoDB 集合并检索它

从不同集合中的数据创建新条目 (MongoDb)

MongoDB 中的 Drupal 7 数据