【问题标题】:Achieving ACID (like) transations in Couchbase在 Couchbase 中实现 ACID(类似)转换
【发布时间】:2021-02-13 05:36:49
【问题描述】:

上下文 - 我有一个基于播放框架的应用程序,它使用 Couchbase 作为其主数据库。想要为多个文档实现某种程度的符合 ACID 的事务能力。 (我知道 Couchbase 6.5+ 已经支持多文档事务,但我的应用程序在 Couchbase 6.0 上,目前无法升级)

为什么 - 观察到的问题,其中请求中途失败(由于多种不可避免的原因)并且在请求失败之前已经修改的文档基本上已损坏。

可能的解决方案

  1. 在 DAO 层创建一个拦截器,它将所有修改后的文档存储在请求 context 中,并在请求结束时提交文档。这需要对Play context的大小、它的持久性等进行一些研究。
  2. 将正在修改的文档作为请求的一部分临时存储到其他存储(可能是 Redis?或者可能在 Couchbase 本身的不同存储桶中?),并在请求结束时提交这些文档。

我希望对我迄今为止想到的这些解决方案提供意见。

对于使用 Couchbase 的应用程序,还有其他一些方法可以在应用程序级别实现某种 ACID 合规性。如果有人可以在这里帮助我,那就太好了。

【问题讨论】:

  • 我几乎可以保证,解决阻碍 Couchbase 升级的任何问题都比开发强大的事务实现更容易。
  • 如果您真正感兴趣,不要试图阻止您(分布式事务是一个引人入胜的话题)——只是说可能有一种更有效的方法可以实现您的目标。

标签: playframework transactions nosql couchbase


【解决方案1】:

如果您绝对无法升级,您可以尝试一些方法,但正如 cmets 中所述,升级将使许多事情(不仅仅是 ACID 事务)变得更加容易。

前段时间,我写了一篇关于一种方法的博文:https://blog.couchbase.com/multi-document-transactions-acid-couchbase-2/,称为“两阶段提交”。

有6个步骤:

  1. 创建交易文件
  2. 切换到待处理
  3. 更改文档
  4. 切换到已提交
  5. 移除交易标签
  6. 切换到完成

这些是“幸福的道路”步骤。我概述了您必须处理的一些期望,包括“待处理”期间的异常事务“提交”后的异常,但还有更多的异常、竞争条件、您需要准备的情况。

还有NDescribe project,我认为它已经有一段时间没有更新了,但可能对你有用。除其他功能外,它还包括事务实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多