2016-04-27 72 views
1

我一直在研究Couchbase作为我们CMS系统的MySQL替代品。 让我感到困惑的是缺少交易 我们已经在我们的组件上建立了版本 每次编辑器保存一个组件时,前一个保存为新版本 此外,我们有审计日志任何操作,所以更新记录在另一个表中。总而言之,更新涉及将数据写入至少3个表格 这不是MySQL的问题,因为以上所有内容都包含在事务中。如果上述失败之一,交易被中止,没有任何东西写入Couchbase作为CMS持久层

据我所知,Couchbase提供了在单个文档上完成的操作的原子性。 那么这个用例如何被couchbase覆盖?

问候

回答

0

我是很新的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

嗨,对于迟到的回复感到抱歉。这两点都是有效的,并且已经考虑过了,但是它们似乎并没有解决在1个“交易”中创建/更新多个文档的问题。 – Thomas

+0

这是一个很好的问题。我对Couchbase仍然很陌生,所以我会试着找出更多。这里有一些信息,但它似乎仍然可能有一个更简单的方法:http://docs.couchbase.com/developer/dev-guide-3.0/transactional-logic.html –

1

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

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

所以本质是:

  • 尝试,如果你有机会没有交易的事情。

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