我正在查看CouchBase Dev Guide并试图了解“两阶段提交”的工作方式。我觉得他们给出的代码示例与图表不同。

代码示例

它们链接到Ruby Gist,它描述了如何将积分从一个帐户转移到另一个帐户。

我的理解是,他们遵循以下路线:

  • 将事务状态更改为pending
  • 通过更改积分并添加对交易
  • 的引用来更新第一个帐户
  • 通过更改积分并添加对交易
  • 的引用来更新第二个帐户
  • 将事务状态更改为committed
  • 从第一个帐户
  • 删除交易参考
  • 从第二个帐户
  • 删除交易参考
  • 将事务状态更改为done

  • 在此示例中,如果第2步和第3步之间失败,我们可以通过将更改撤消至指向任何引用交易的帐户的点来进行回滚。

    图表示例

    这是用于说明两个锁相的图表;我认为它与代码示例不同...

    该图似乎说您在两个帐户中都添加了对交易的引用,先添加,然后再添加,从这两个帐户中添加/删除点。

    在此示例中,如果第3步和第4步之间失败,您如何知道要回滚的内容?您怎么知道您是否将更改应用于点?

    图表有误吗?

    最佳答案

    是的,没错。图表步骤3还应在将事务添加到列表的同时应用余额更改。基本上,将交易添加到列表中只是一个迹象,表明已对余额进行了一些更改。

    顺便说一句,在原始要点的链接中,您可以找到更完整的可执行解决方案,其回滚代码为:https://gist.github.com/avsej/3136027

    关于nosql - 两阶段提交Couchbase,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22766093/

    10-12 15:14