使用Cassandra进行单元版本控制

时间:2012-09-12 06:00:04

标签: nosql cassandra hbase

我的应用程序使用AbstractFactory作为DAO层,所以一旦实现了HBase DAO系列,创建Cassandra DAO系列并从几个角度看差异对我来说非常棒。
无论如何,试图这样做,我看到Cassandra不支持像HBase这样的单元格版本(我的应用程序强烈使用它)所以我想知道是否有一些表设计技巧(或其他东西)# 34;模拟"这种行为在Cassandra

1 个答案:

答案 0 :(得分:3)

一种常见策略是使用具有两个组件的复合列名称:普通列名称和版本。您用于版本组件的内容取决于您的访问模式。如果您可能同时拥有来自多个客户端的更新,那么使用TimeUUID是您最安全的选择。如果一次只能更新一个客户端,则可以使用较小的内容,例如时间戳或版本号。

假设您使用版本号以简化,这就是使用版本化字段存储文档时的样子:

| ('body', 5) | ('body', 4) | ... | ('title', 1) | ('title', 0) |
|-------------|-------------|-----|--------------|--------------|
| 'Neque ...' | 'Dolor ...' | ... | 'Lorem Ipsum'| 'My Document'|

如果您想要特定版本的字段,字段的所有版本或所有字段的所有版本,则此格式非常有用。

如果您还希望支持一次有效地获取所有字段的最新版本,我建议您进行非规范化并添加第二列系列,其中每个字段的最新版本以其正常形式存储。您可以为每次更改盲目地覆盖这些字段。继续我们的例子,这个列系列看起来像:

|   'body'    |    'title'    |
|-------------|---------------|
| 'Neque ...' | 'Lorem Ipsum' |