两阶段提交Couchbase

时间:2014-03-31 15:45:01

标签: nosql couchbase

我正在查看CouchBase Dev Guide并尝试了解两阶段提交的工作原理。我觉得他们提供的代码示例与图表不同。

代码示例

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

我的理解是他们走了以下路线:

  1. 将交易状态更改为pending
  2. 通过更改积分并添加对交易的引用来更新第一个帐户
  3. 通过更改积分并添加对交易的引用
  4. 来更新第二个帐户
  5. 将交易状态更改为committed
  6. 从第一个帐户中删除交易引用
  7. 从第二个帐户中删除交易引用
  8. 将交易状态更改为done
  9. 在此示例中,如果步骤2和3之间出现故障,我们可以通过将更改的内容反转为指向任何引用事务的帐户来回滚。

    图示例

    这是用于解释两相锁定的图;我认为它不同意代码示例......

    Two Stage Commit Diagram

    图表似乎表示您向两个帐户添加了对交易的引用,然后您在这两个帐户中添加/删除点数。

    在此示例中,如果步骤3和4之间出现故障,您将如何知道要回滚的内容?你怎么知道你是否已将改变应用于积分?

    图表错了吗?

1 个答案:

答案 0 :(得分:1)

是的,你是对的。图表步骤3还应在将事务添加到列表的同时应用余额更改。基本上将事务添加到列表只是表示某些更改已应用于余额。

btw在原始要点的链接中,您可以找到更完整的可执行解决方案,并带有回滚代码:https://gist.github.com/avsej/3136027