Transactions Couchbase作为CMS持久层

Transactions Couchbase作为CMS持久层,transactions,couchbase,Transactions,Couchbase,我一直在寻找Couchbase作为我们CMS系统MySQL的替代品。 令我困惑的事情之一是缺少交易 我们已经在组件之上构建了版本控制 每次编辑器保存零部件时,上一个零部件都会保存为新版本 此外,我们对几乎所有操作都有审计日志记录,因此更新记录在另一个表中。 总而言之,更新涉及将数据写入至少3个表 这不是MySQL的问题,因为以上所有内容都包装在一个事务中。如果上述任一操作失败,事务将中止,并且不会写入任何内容 我知道Couchbase为单个文档上的操作提供了原子性。 那么couchbase如何涵

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

我知道Couchbase为单个文档上的操作提供了原子性。 那么couchbase如何涵盖这样的用例呢


关于

我对Couchbase很陌生,但从我目前学到的:

  • 对单个文档的操作是原子的
  • 您可以使用CAS实现乐观并发
因此,我想我建议您:a)将数据建模为JSON文档,b)使用CAS确保没有其他人修改过文档


不确定您使用的是哪种语言/SDK,但这里有一个CAS使用.NET SDK的示例:

您描述的需求不一定需要事务逻辑。添加内容的新版本可以在不接触以前版本的情况下完成,只需将新版本作为带有新版本号或时间戳的文档插入即可。当前文档是具有最高版本号或时间戳的文档,可以使用CB视图轻松检索。任何附加的日志记录表都是冗余的,可以用原始数据的适当视图替换。对于唯一的版本号,CB提供了中所述的原子计数器概念

当然,可能还有额外的要求使事务成为必要。这本书在第124页到133页描述了一种实现事务的方法。我想知道为什么CB开发人员没有将这样的功能集成到他们的产品中,这似乎是可能的

因此,其实质是:

  • 如果您有机会不进行交易,请尝试一下

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


您好,很抱歉回复太晚。这两点都是有效的,并且考虑到了它们,但是它们似乎不能解决在一个“事务”中创建/更新多个文档的问题。这是一个好问题。我对Couchbase还是个新手,所以我将尝试了解更多。这里有一些信息,但似乎还有更简单的方法:嗨,请看一下: