Time 如何在Cassandra中使用时间序列数据模型?

Time 如何在Cassandra中使用时间序列数据模型?,time,cassandra-2.0,Time,Cassandra 2.0,我不熟悉Cassandra,但我在前面看到过节俭的例子,我可以将专栏建模为: id | start_time | end_time | total_value | value + [timeStamp1] | value + [timeStamp2]... 使用CQL的单列族可以做到这一点吗?我可以看到,我可以创建一个id、timestamp的复合键,并根据时间戳存储值,并为每一行重复事件级元数据,作为反规范化的一部分,但这仍然会将其存储在一个大行中吗 是的,你可以在卡桑德拉用一张桌子做。其思

我不熟悉Cassandra,但我在前面看到过节俭的例子,我可以将专栏建模为:

id | start_time | end_time | total_value | value + [timeStamp1]
| value + [timeStamp2]...

使用CQL的单列族可以做到这一点吗?我可以看到,我可以创建一个id、timestamp的复合键,并根据时间戳存储值,并为每一行重复事件级元数据,作为反规范化的一部分,但这仍然会将其存储在一个大行中吗

是的,你可以在卡桑德拉用一张桌子做。其思想是您有一个分区密钥id和一个集群密钥时间戳。对于同一分区键,所有数据都写入一大行

CREATE TABLE timeseries (id uuid, ts timestamp, info text, otherinfo text, PRIMARY KEY (id, ts));
在本例中,您可以按时间查询特定id的所有时间戳事件

 SELECT * FROM timeseries where id=someid and ts > 0 and ts < 100;
对于每个id,您将有一个包含事件的宽行。至于重复事件元数据作为非规范化,如果对于同一id,所有其他信息都没有改变,那么您应该将它们声明为静态的,因此,不管一行中有多少事件,这些列只有在智能非规范化之后才会出现

嗯,,
Carlo

在主键中使用ts不会导致这里出现问题吗?您的示例表似乎每行包含一个时间戳,这意味着所有值都有一个新行,但OP似乎需要一个宽行,在这种情况下,列本身应该是时间戳,因此在识别行ID后,范围查找工作正常。太好了!static关键字是我所缺少的。@在我的示例中,我使用的是一个宽行:宽行的分区是id键-它不是每行一个时间戳,同一个id可以有多个时间戳,并且都位于同一个分区宽行下。这是因为主键是由一个分区键和一个集群键组成的——请看一看,我仍然很困惑,为什么要将时间戳ts用于集群?我不明白这是怎么回事。你是说你的ts就像OP的开始时间?我只是不明白如何将数据从一行分割到另一行,因为我们讨论的是在一行中存储大量时间戳。我知道您的示例可以修改为在创建行时向行中添加许多新列,但我仍然不明白为什么要首先创建ts群集键?或者您是说ts时间戳会将宽行分块成多个宽行?那么,ts可能是每个月,行中的单个时间戳是在一个月内每半小时一次还是什么?也就是说,在这里进行集群是为了以表键属性隐式处理的方式处理潜在的2000列限制吗?