2个Couchbase文档的原子更新

时间:2016-05-19 11:30:44

标签: document couchbase atomic atomicity spring-data-couchbase

请您给我一个提示是否有任何方法可以使用Java SDK以原子方式更新Couchbase上的多个文档?我知道,可以使用嵌入文件,从而保证所需,但不幸的是,它对我来说不起作用。

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

感谢您身边的任何帮助或建议。 谢谢!

2 个答案:

答案 0 :(得分:0)

不幸的是,这归结为一项交易,而Couchbase并不提供本机交易支持。使用Couchbase可以达到的原子级别是单个文档的级别。

我知道有些沙发基用户在他们的应用程序代码层中实现了手动事务管理,但这是一个非常复杂的主题,而且我所知道没有公开可用的解决方案。

答案 1 :(得分:0)

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

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