Couchbase作为CMS持久层

时间:2016-04-27 15:22:03

标签: transactions couchbase

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

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

此致

2 个答案:

答案 0 :(得分:1)

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

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

所以本质是:

  • 如果您有机会没有交易,请试用。

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

答案 1 :(得分: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