Cassandra:数据建模

时间:2015-09-28 07:49:17

标签: cassandra

我目前在cassandra中有一个名为macrecord的表,看起来像这样:

 macadd            | position | record | timestamp
-------------------+----------+--------+---------------------
 23:FD:52:34:DS:32 |        1 |      1 | 2015-09-28 15:28:59

但是我现在需要进行查询,使用timestamp列查询范围。如果没有时间戳作为主键(在本例中为macadd)i-e的一部分而不是集群密钥,我认为没有可能这样做。

如果我将时间戳作为主键的一部分,则表格如下所示:

 macadd            | timestamp           | position | record
-------------------+---------------------+----------+--------
 23:FD:52:34:DS:32 | 2015-09-28 15:33:26 |        1 |      1

但是现在我无法在获得重复的macadd时更新timestamp列。

update macrecord set timestamp = dateof(now()) where macadd = '23:FD:52:34:DS:32'; 

给出错误:

message="PRIMARY KEY part timestamp found in SET part"

在这种情况下,除了删除整个行(如果存在重复的macadd值)然后插入带有更新时间戳的新行时,我想不出其他解决方案。

有没有更好的解决方案来更新时间戳,只要有重复的macadd值或另一种方法来查询原始表中只有macadd是主键的范围内的时间戳值。

1 个答案:

答案 0 :(得分:1)

要在CQL中执行范围查询,您需要将时间戳作为群集键。但正如您所看到的,如果不执行删除和插入新密钥,则无法更新关键字段。

Cassandra 3.0于10月发布时将提供的一个选项是物化视图。这将允许您将时间戳作为基表中的值列和视图中的聚类列。查看示例here