首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cassandra时间序列数据建模与极限划分大小

Cassandra时间序列数据建模与极限划分大小
EN

Stack Overflow用户
提问于 2016-04-19 15:19:49
回答 2查看 943关注 0票数 2

我们目前正在调查卡桑德拉作为一个大型时间序列系统的数据库。

我读过https://academy.datastax.com/resources/getting-started-time-series-data-modeling关于用卡桑德拉模拟时间序列数据的文章。

我们拥有的是许多气象站的高速时间序列数据。每个气象站都有许多“传感器”,每个传感器收集三个指标:温度、湿度和光线。

我们正试着把每个系列都存储为宽行。然而,我们希望在整个项目的整个过程中,每个站都能获得数十亿的读数,所以我们希望限制行的大小。

我们希望每个(weather_station_id, year, day_of_year)都有一个行,也就是说,每天都有一个新行。但是,我们仍然希望分区键是weather_station_id -也就是说,我们希望一个站点的所有读数都在同一个节点上。

我们目前有以下模式,但我想得到一些反馈。

代码语言:javascript
复制
CREATE TABLE weather_station_data (
    weather_station_id int,
    year int,
    day_of_year int,
    time timestamp,
    sensor_id int,
    temperature int,
    humidity int,
    light int,
    PRIMARY KEY ((weather_station_id), year, day_of_year, time, sensor_id)
) WITH CLUSTERING ORDER BY (year DESC, day_of_year DESC, time DESC,       sensor_id DESC);

在上述文档中,他们使用了“按日期限制分区行”的概念。但是,我不清楚他们示例中的日期是否是分区键的一部分。

EN

回答 2

Stack Overflow用户

发布于 2016-04-20 06:39:31

根据本教程,如果我们选择weather_station_id作为唯一的分区,则行将耗尽。也就是说,C*的实际限制是每个分区有20亿列。

海事组织,你的数据模型很糟糕。

但是,我不清楚他们示例中的日期是否是分区键的一部分。

使用的教程

PRIMARY KEY ((weatherstation_id,date),event_time)

所以,是的,他们认为数据是分区键的一部分。

我们希望一个电台的所有读数都在同一个节点上。

我不知道,你为什么不这样要求。您可以使用多个查询获取超过一年的天气数据。

select * from weather_station_data where weather_station_id=1234 and year= 2013; select * from weather_station_data where weather_station_id=1234 and year= 2014;

因此,请考虑将结构更改为

PRIMARY KEY ((weather_station_id, year), day_of_year, time, sensor_id)

希望能帮上忙!

票数 1
EN

Stack Overflow用户

发布于 2016-04-20 07:18:26

在我看来,datastax模型并不是很好。这种模式的问题是:

  • 他们正在使用气象站作为分区键。具有相同分区键的所有行都存储在同一台机器上。这意味着:如果你有10年的原始数据(100毫秒的步骤),你将打破卡桑德拉限制真的很快。10年×365天×24小时×60分钟×60秒×10 (100×台阶)x 7列。上限是20亿美元。在我看来,如果您构建这个数据模型,您将不会使用cassandra的好处。您还可以为每个气象站使用mongo、mysql或其他数据库。

更好的解决方案是:问问自己如何查询这些数据。如果你说:我每年查询所有数据,使用年份也作为分析键。如果还需要查询一年以上的数据,则可以使用不同的年份创建两个查询。这是工作和性能更好。(瓶颈可能只是你的客户的网络)

  • 还有一个tipp: Cassandra不像mysql。这是一个非规范化的数据库。这意味着:保存数据不止一次并不脏。这意味着:每年查询数据是很重要的,每小时、每天或每sensor_id查询数据也很重要,您可以创建具有不同分区键和parimary密钥顺序的列家族。复制你的数据是可以的。Cassandra优化的是写性能,而不是读性能。这意味着:与其按正确的顺序读取数据,不如按正确的顺序写入数据。在Cassandra3.0中有一个新特性,称为物化视图,用于自动复制。如果你认为:哦,不,我会复制所需的存储。记住:仓库真的很便宜。用1tb买十个HDD是可以的。它是免费的。表演很重要。

我有一个问题要问你:你能汇总你的数据吗?Cassandra有一个名为counter的列类型。您可以创建一个java/scala应用程序,在该应用程序中,您可以在生成数据时对数据进行聚合。您可以为此使用流框架: Flink或Spark。(如果你需要的不仅仅是数数。)一种情况是:您聚合每个小时和一天的数据。你在你的流媒体应用程序中得到了你的数据。现在:您有一个用于小时数据的变量。你数数向上或向下或什么的。如果小时结束,则将此行放入每小时列系列和每日列系列中。在你的每日专栏中,你的家庭使用一个计数器。希望你能理解我的意思。

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

https://stackoverflow.com/questions/36722666

复制
相关文章

相似问题

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