【发布时间】:2021-02-13 05:36:49
【问题描述】:
上下文 - 我有一个基于播放框架的应用程序,它使用 Couchbase 作为其主数据库。想要为多个文档实现某种程度的符合 ACID 的事务能力。 (我知道 Couchbase 6.5+ 已经支持多文档事务,但我的应用程序在 Couchbase 6.0 上,目前无法升级)
为什么 - 观察到的问题,其中请求中途失败(由于多种不可避免的原因)并且在请求失败之前已经修改的文档基本上已损坏。
可能的解决方案
- 在 DAO 层创建一个拦截器,它将所有修改后的文档存储在请求 context 中,并在请求结束时提交文档。这需要对Play context的大小、它的持久性等进行一些研究。
- 将正在修改的文档作为请求的一部分临时存储到其他存储(可能是 Redis?或者可能在 Couchbase 本身的不同存储桶中?),并在请求结束时提交这些文档。
我希望对我迄今为止想到的这些解决方案提供意见。
对于使用 Couchbase 的应用程序,还有其他一些方法可以在应用程序级别实现某种 ACID 合规性。如果有人可以在这里帮助我,那就太好了。
【问题讨论】:
-
我几乎可以保证,解决阻碍 Couchbase 升级的任何问题都比开发强大的事务实现更容易。
-
如果您真正感兴趣,不要试图阻止您(分布式事务是一个引人入胜的话题)——只是说可能有一种更有效的方法可以实现您的目标。
标签: playframework transactions nosql couchbase