Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nosql 使用Cassandra进行单元版本控制_Nosql_Cassandra_Hbase - Fatal编程技术网

Nosql 使用Cassandra进行单元版本控制

Nosql 使用Cassandra进行单元版本控制,nosql,cassandra,hbase,Nosql,Cassandra,Hbase,我的应用程序为DAO层使用了一个AbstractFactory,因此一旦HBase DAO系列实现,创建Cassandra DAO系列并从多个角度看差异将是非常棒的。 无论如何,为了做到这一点,我看到Cassandra不支持像HBase那样的单元版本控制(我的应用程序很好地利用了它),所以我想知道是否有一些表设计技巧(或其他东西)可以“模仿”Cassandra中的这种行为一种常见的策略是使用包含两个组件的复合列名:普通列名和版本。版本组件使用的内容取决于访问模式。如果您可能同时有来自多个客户端的

我的应用程序为DAO层使用了一个AbstractFactory,因此一旦HBase DAO系列实现,创建Cassandra DAO系列并从多个角度看差异将是非常棒的。

无论如何,为了做到这一点,我看到Cassandra不支持像HBase那样的单元版本控制(我的应用程序很好地利用了它),所以我想知道是否有一些表设计技巧(或其他东西)可以“模仿”Cassandra中的这种行为一种常见的策略是使用包含两个组件的复合列名:普通列名和版本。版本组件使用的内容取决于访问模式。如果您可能同时有来自多个客户端的更新,那么使用TimeUUID是最安全的选择。如果一次只能更新一个客户端,那么可以使用更小的东西,比如时间戳或版本号

假设为了简单起见使用版本号,下面是存储具有版本化字段的文档时可能出现的情况:

| ('body', 5) | ('body', 4) | ... | ('title', 1) | ('title', 0) |
|-------------|-------------|-----|--------------|--------------|
| 'Neque ...' | 'Dolor ...' | ... | 'Lorem Ipsum'| 'My Document'|
如果需要字段的特定版本、字段的所有版本或所有字段的所有版本,此格式主要非常有用

如果您还想支持一次高效地获取所有字段的最新版本,我建议您取消规范化并添加第二个列族,其中仅以正常形式存储每个字段的最新版本。每次更改都可以盲目覆盖这些字段。继续我们的示例,此列族如下所示:

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

谢谢你明确的答复。如果我的访问模式类似于“给我时间戳XXXX之前的单元格”,那又如何呢?我想我需要解析每一列,以便找到我需要的内容。这应该不是一个大问题,因为我的行有(大约)50列,但我想知道在这种情况下是否有其他更合适的方法如果您希望基于时间访问单元格,请使用时间戳(或TimeUUID)作为列名的第一个组件;这将使它们按时间排序,从而可以高效地从时间片中提取任何内容。