我刚刚开始使用Cassandra来存储一些timeseries数据,我正在学习来自http://planetcassandra.org/getting-started-with-time-series-data-modeling/的教程
CREATE TABLE temperature (
weatherstation_id text,
event_time timestamp,
temperature text,
PRIMARY KEY (weatherstation_id,event_time)
);当有一个单一类型的测量时,我理解它是如何工作的--这种情况下的温度。但如果我们也有压力测量。这种情况下桌子的结构是什么?是用于时间戳分割的列存储温度和压力,还是创建两列?例如,如果有两列,拼接查询的性能会受到影响吗?
发布于 2014-10-16 09:36:49
在cassandra中,最有效的查询是单个分区,然后是使用列键的列。主键中的第一个键是分区键,随后的所有键都是列键。列键的顺序很重要。您可以从“左到右”...i.e指定列键。您只能指定分区键,或分区键+第一列键,或分区键+第一列键+第二列键.但是您不能指定分区键+第二列键(不是没有辅助索引,但我现在就不提了)。因此,cassandra中的模式很大程度上是由查询需求驱动的。如果您知道您将始终按类型查询(如温度读数、压力读数、或其他读数或多种类型的组合),那么以下模式可以工作:
CREATE TABLE readings (weatherstation_id text,
event_type text,
event_time timestamp,
reading_value text,
PRIMARY KEY (weatherstation_id, event_type, event_time)
);然后,您可以使用以下内容:
SELECT * FROM readings where weatherstation_id = '12' and event_type='temperature'....这将为每次读取创建一行。
另一种选择是每行有多个读数。在这种情况下,模式可能如下所示:
CREATE TABLE readings (weatherstation_id text,
event_time timestamp,
readings map<string, string>,
PRIMARY KEY (weatherstation_id, event_time)
);然后你就可以得到一排时间戳的所有读数。这确实意味着您不能简单地过滤到特定类型的读取(即获得一行的所有读数),尽管您可以在映射的键上添加一个索引,这将允许您进行筛选。有关更多细节,请访问CreatIdxCollKey。注意,键索引是Cassandra2.1的一个新特性。
希望这能有所帮助。
https://stackoverflow.com/questions/26396381
复制相似问题