Mongodb原子模式规划

时间:2017-11-19 16:31:57

标签: database mongodb database-design nosql database-normalization

我的程序包含用户和组。 用例:用户可以获得可以提供给组的信用。

我希望不会失去任何学分。

类似RDBMS模式的问题是Mongo的原子性是文档级的。我减少了用户的积分,然后增加了团体的积分。如果应用程序在发送的两个信用点之间崩溃,则会丢失。 (如果我替换了两个动作,则可以在不退出用户的情况下出现。)

一种解决方案可能是使用称为事务的集合。然后,可以根据从用户的信用中减去的用户的发送信用来计算用户的信用。该组的信用可以计算为已发送信用的总和。问题是如果数据库增长,总和将需要一段时间。

你能用NoSQL为我提供任何可接受的,可扩展的,强大的解决方案吗? (我知道在RDBMS中这很容易)

1 个答案:

答案 0 :(得分:1)

MongoDB中的两阶段提交

您可以使用两阶段提交方法执行多文档更新或多文档事务。

  

使用两阶段提交可确保数据一致,并且在出现错误的情况下,事务之前的状态是可恢复的。但是,在此过程中,文档可以表示未决数据和状态。

有关两阶段提交的详细信息,您可以参考文档here

  

注意
  因为MongoDB只有单文档操作是原子的,所以两阶段提交只能提供类似事务的语义。应用程序可以在两阶段提交或回滚期间在中间点返回中间数据。