【问题标题】:Atomic update of 2 Couchbase documents2 个 Couchbase 文档的原子更新
【发布时间】:2016-05-19 11:30:43
【问题描述】:

您能否给我一个提示,是否有任何方法可以使用 Java SDK 以原子方式更新 Couchbase 上的多个文档?我知道,可以使用嵌入文档,从而保证需要,但不幸的是,它不适合我。

在我的例子中,文档更新的事实导致它需要使其他文档无效(将特殊标志设置为 false),并且应该以原子方式执行。

感谢您提供的任何帮助或建议。 谢谢!

【问题讨论】:

    标签: document couchbase atomic spring-data-couchbase


    【解决方案1】:

    虽然没有内置方法可以对多个文档执行原子更改,但您可以使用two-phase commit 来实现相同的结果。请注意,在这种情况下,2PC 不提供其他事务功能,例如隔离和一致性,只提供原子性 - 这就是您所要求的。 Couchbase 的 Java 中没有参考 2PC 实现,但文档中有 Ruby 和 PHP 中的两个。我建议阅读 Couchbase 中providing transactional logic 上的文档,以深入了解如何实现这一点。将示例代码移植到 Java 应该相当简单。

    一般来说,要以原子方式对多个文档执行一组更改,您需要依次对每个文档执行原子写入,加上一个临时的“状态”文档,这样流程中的每个步骤都是唯一的。这样,如果事务在中间因任何原因中断,您就可以从同一步骤继续或回滚更改。

    【讨论】:

    • 嗨大卫!谢谢您的回答!看起来很有趣!将尝试调查!我想,这是迄今为止最好的努力......谢谢!
    【解决方案2】:

    不幸的是,这归结为事务,而 Couchbase 不提供本地事务支持。您可以使用 Couchbase 实现的原子性级别是单个文档的级别。

    我知道一些 couchbase 用户已经在他们的应用代码层中实现了手动事务管理,但这是一个相当复杂的话题,而且据我所知没有公开可用的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-06
      • 2018-03-02
      • 2021-11-17
      相关资源
      最近更新 更多