2 个 Couchbase 文档的原子更新

Atomic update of 2 Couchbase documents

能否请您给我一个提示,有没有什么方法可以使用 Java SDK 自动更新 Couchbase 上的多个文档?我知道,可以使用文档嵌入,从而保证需要,但不幸的是,它对我不起作用。

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

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

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

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

虽然没有对多个文档执行原子更改的内置方法,但您可以使用 Couchbase 中的 two-phase commit to achieve the same result. Note that in this case 2PC doesn't provide other transactional features, like isolation and consistency, only atomicity - which is what you're asking for. There is no reference 2PC implementation in Java for Couchbase, but there are two in Ruby and PHP in the documentation. I recommend reading the docs on providing transactional logic 来深入描述如何实现这一点。将示例代码移植到 Java 应该相当简单。

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