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

时间:2012-03-25 17:46:01

标签: mongodb transactions mongodb-php

我使用mongodb,我提出了一种可能的策略来保存不同集合中的数据,例如2个集合。但是,就像事务系统一样,我希望确保数据存在于collection1和collection2中,或者什么也不存在。

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

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

另外,我可以将“操作数据”保存在单独的集合中,例如“oper_coll”集合名称。所以我只能查询“oper_coll”来检索“操作数据”,但它暗示当我在collection1中保存数据时,我必须在“oper_coll”中保存“操作数据”以跟踪当前操作。我希望数据在collection1中正确保存并在oper_coll中操作。如果出现问题则无效,数据不会出现在任何集合(collection1和oper_coll)中。所以我需要一个在应用程序级别作为事务系统的东西,因为我知道mongodb不支持事务。

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

你有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

这有帮助吗?