我是 Cassandra 的新手,我正在尝试为时间序列数据制作模型。我目前的提议是这样的:
CREATE TABLE myproject.variables (
nearest_10_minutes timestamp,
variable_type text,
value double,
variable_timestamp timestamp,
PRIMARY KEY((variable_type, nearest_10_minutes), variable_timestamp)
)
WITH CLUSTERING ORDER BY (variable_timestamp ASC);
是感应到的variable_timestamp
实际时间。value
这nearest_10_minutes
是时间戳,但四舍五入到最接近的 10 分钟。例如,如果 variable_timestamp 是:19/11/2013 13:13:19.562
,则最近的_10_minutes 是19/11/2013 13:10:00.000
我可以摆脱集群键中的 variable_type 并将其放入二级索引,但我不确定这是否有助于我的情况。
问题是我不确定如何正确排序数据。如果我采取select * from myproject.variables
(仅用于测试目的),我会得到类似(仅显示时间戳):
Tue Nov 19 13:19:52 CET 2013
Tue Nov 19 13:19:55 CET 2013
Tue Nov 19 13:40:04 CET 2013
Tue Nov 19 13:40:14 CET 2013
Tue Nov 19 13:40:29 CET 2013
...
Tue Nov 19 13:49:58 CET 2013
Tue Nov 19 13:49:59 CET 2013
...
Tue Nov 19 14:30:00 CET 2013
Tue Nov 19 14:30:01 CET 2013
现在,我不太清楚我是否应该得到一些默认排序?如果我使用 a,select * from myproject.variables order by variable_timestamp asc
那么我会收到一条错误消息,指出如果分区键是用 EQ 或 IN 过滤的,我只能使用 ORDER BY。而且 IN 只能与分区键的第二部分一起使用,而不能与第一部分一起使用。
总而言之,我有点困惑,我怎样才能以我可以选择和排序数据的方式对此进行建模?
- - - - - - - - - - - - - - - 回答: - - - - - - - - - ------------------
因此,在某种程度上,jorgebg 和 BryceAtNetwork23 的所有当前答案以及 Mikhail Stepura 的评论都向我展示了我认为正确的道路。因为我想尽可能地保持分区随机,但我可以预测它,所以我可以排序查询并使用 IN 关键字(所以我可以在查询中放置多个分区键),我只是决定做一个自定义分区键。我选择的方案是连接 variable_type:timestamp_rounded_by_the_hour。我知道,这会引入一些存储逻辑的客户端泄漏,但是在代码中查询时重新创建分区键集相当容易。
我选择的答案是贡献最大的答案。