我的应用程序使用AbstractFactory作为DAO层,所以一旦实现了HBase DAO系列,创建Cassandra DAO系列并从几个角度看差异对我来说非常棒。
无论如何,试图这样做,我看到Cassandra不支持像HBase这样的单元格版本(我的应用程序强烈使用它)所以我想知道是否有一些表设计技巧(或其他东西)# 34;模拟"这种行为在Cassandra
答案 0 :(得分:3)
一种常见策略是使用具有两个组件的复合列名称:普通列名称和版本。您用于版本组件的内容取决于您的访问模式。如果您可能同时拥有来自多个客户端的更新,那么使用TimeUUID是您最安全的选择。如果一次只能更新一个客户端,则可以使用较小的内容,例如时间戳或版本号。
假设您使用版本号以简化,这就是使用版本化字段存储文档时的样子:
| ('body', 5) | ('body', 4) | ... | ('title', 1) | ('title', 0) |
|-------------|-------------|-----|--------------|--------------|
| 'Neque ...' | 'Dolor ...' | ... | 'Lorem Ipsum'| 'My Document'|
如果您想要特定版本的字段,字段的所有版本或所有字段的所有版本,则此格式非常有用。
如果您还希望支持一次有效地获取所有字段的最新版本,我建议您进行非规范化并添加第二列系列,其中每个字段的最新版本以其正常形式存储。您可以为每次更改盲目地覆盖这些字段。继续我们的例子,这个列系列看起来像:
| 'body' | 'title' |
|-------------|---------------|
| 'Neque ...' | 'Lorem Ipsum' |