首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多种度量类型的时间序列的Cassandra

具有多种度量类型的时间序列的Cassandra
EN

Stack Overflow用户
提问于 2014-10-16 04:46:37
回答 1查看 631关注 0票数 3

我刚刚开始使用Cassandra来存储一些timeseries数据,我正在学习来自http://planetcassandra.org/getting-started-with-time-series-data-modeling/的教程

代码语言:javascript
复制
CREATE TABLE temperature (
weatherstation_id text,
event_time timestamp,
temperature text,
PRIMARY KEY (weatherstation_id,event_time)
);

当有一个单一类型的测量时,我理解它是如何工作的--这种情况下的温度。但如果我们也有压力测量。这种情况下桌子的结构是什么?是用于时间戳分割的列存储温度和压力,还是创建两列?例如,如果有两列,拼接查询的性能会受到影响吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-16 09:36:49

在cassandra中,最有效的查询是单个分区,然后是使用列键的列。主键中的第一个键是分区键,随后的所有键都是列键。列键的顺序很重要。您可以从“左到右”...i.e指定列键。您只能指定分区键,或分区键+第一列键,或分区键+第一列键+第二列键.但是您不能指定分区键+第二列键(不是没有辅助索引,但我现在就不提了)。因此,cassandra中的模式很大程度上是由查询需求驱动的。如果您知道您将始终按类型查询(如温度读数、压力读数、或其他读数或多种类型的组合),那么以下模式可以工作:

代码语言:javascript
复制
CREATE TABLE readings (weatherstation_id text,
event_type text,
event_time timestamp,
reading_value text,
PRIMARY KEY (weatherstation_id, event_type, event_time)
);

然后,您可以使用以下内容:

代码语言:javascript
复制
SELECT * FROM readings where weatherstation_id = '12' and event_type='temperature'....

这将为每次读取创建一行。

另一种选择是每行有多个读数。在这种情况下,模式可能如下所示:

代码语言:javascript
复制
CREATE TABLE readings (weatherstation_id text,
event_time timestamp,
readings map<string, string>,
PRIMARY KEY (weatherstation_id, event_time)
);

然后你就可以得到一排时间戳的所有读数。这确实意味着您不能简单地过滤到特定类型的读取(即获得一行的所有读数),尽管您可以在映射的键上添加一个索引,这将允许您进行筛选。有关更多细节,请访问CreatIdxCollKey。注意,键索引是Cassandra2.1的一个新特性。

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26396381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档