我的程序包含用户和组。 用例:用户可以获得可以提供给组的信用。
我希望不会失去任何学分。
类似RDBMS模式的问题是Mongo的原子性是文档级的。我减少了用户的积分,然后增加了团体的积分。如果应用程序在发送的两个信用点之间崩溃,则会丢失。 (如果我替换了两个动作,则可以在不退出用户的情况下出现。)
一种解决方案可能是使用称为事务的集合。然后,可以根据从用户的信用中减去的用户的发送信用来计算用户的信用。该组的信用可以计算为已发送信用的总和。问题是如果数据库增长,总和将需要一段时间。
你能用NoSQL为我提供任何可接受的,可扩展的,强大的解决方案吗? (我知道在RDBMS中这很容易)
答案 0 :(得分:1)
MongoDB中的两阶段提交
您可以使用两阶段提交方法执行多文档更新或多文档事务。
使用两阶段提交可确保数据一致,并且在出现错误的情况下,事务之前的状态是可恢复的。但是,在此过程中,文档可以表示未决数据和状态。
有关两阶段提交的详细信息,您可以参考文档here
注意
因为MongoDB只有单文档操作是原子的,所以两阶段提交只能提供类似事务的语义。应用程序可以在两阶段提交或回滚期间在中间点返回中间数据。