【问题标题】:Couchbase as a CMS persistence layerCouchbase 作为 CMS 持久层
【发布时间】:2016-04-27 15:22:02
【问题描述】:

我一直在研究 Couchbase 作为我们 CMS 系统的 MySQL 替代品。 令我困惑的一件事是缺乏交易 我们在组件之上构建了版本控制 每次编辑器保存组件时,前一个组件都会保存为新修订版本 此外,我们对几乎所有操作都有审计日志记录,因此更新记录在另一个表中。 总而言之,更新涉及将数据写入至少 3 个表 这对 MySQL 来说不是问题,因为以上所有内容都包含在事务中。如果上述其中一项失败,则事务将中止,并且不会写入任何内容

我了解 Couchbase 为对单个文档执行的操作提供原子性。 那么couchbase如何覆盖这样的用例呢?

问候

【问题讨论】:

标签: transactions couchbase


【解决方案1】:

您描述的要求不一定需要事务逻辑。只需将新版本作为带有新版本号或时间戳的文档插入即可,无需接触以前的版本即可添加内容的新版本。当前文档是具有最高版本号或时间戳的文档,可以使用 CB 视图轻松检索。任何额外的日志记录表都是多余的,可以用原始数据的适当视图替换。对于唯一的版本号,CB 提供了http://developer.couchbase.com/documentation/server/current/developer-guide/counters.html 中描述的原子计数器的概念。

当然,可能还有其他要求使交易成为必要。 《http://www.apress.com/9781430266136》一书在第 124 到 133 页描述了一种实现事务的方法。我想知道为什么 CB 开发人员(看起来可能)没有将这样的功能集成到他们的产品中。

所以本质是:

  • 试试看你是否有机会不用交易。

  • 如果您确实需要它们,请检查引用的方法是否适合您。

【讨论】:

    【解决方案2】:

    我对 Couchbase 很陌生,但从我目前所学到的知识来看:

    • 对单个文档的操作是原子操作。
    • 您可以将 CAS 用于乐观并发。

    那么我想我会建议您:a) 将您的数据建模为 JSON 文档,并且 b) 使用 CAS 来确保没有其他人修改过该文档。

    不确定您使用的是哪种语言/SDK,但这里有一个使用 .NET SDK 的 CAS 示例:http://developer.couchbase.com/documentation/server/4.0/sdks/dotnet-2.2/check-and-swap.html

    【讨论】:

    • 您好,很抱歉回复晚了。这两点都是有效的并且已经考虑过了,但是它们似乎并没有解决在 1 个“事务”中创建/更新多个文档的问题
    • 这是个好问题。我还是 Couchbase 的新手,所以我将尝试了解更多信息。这里有一些信息,但似乎仍然有更简单的方法:docs.couchbase.com/developer/dev-guide-3.0/…
    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 2016-03-17
    • 2017-02-05
    相关资源
    最近更新 更多