我们目前正在调查卡桑德拉作为一个大型时间序列系统的数据库。
我读过https://academy.datastax.com/resources/getting-started-time-series-data-modeling关于用卡桑德拉模拟时间序列数据的文章。
我们拥有的是许多气象站的高速时间序列数据。每个气象站都有许多“传感器”,每个传感器收集三个指标:温度、湿度和光线。
我们正试着把每个系列都存储为宽行。然而,我们希望在整个项目的整个过程中,每个站都能获得数十亿的读数,所以我们希望限制行的大小。
我们希望每个(weather_station_id, year, day_of_year)都有一个行,也就是说,每天都有一个新行。但是,我们仍然希望分区键是weather_station_id -也就是说,我们希望一个站点的所有读数都在同一个节点上。
我们目前有以下模式,但我想得到一些反馈。
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);在上述文档中,他们使用了“按日期限制分区行”的概念。但是,我不清楚他们示例中的日期是否是分区键的一部分。
发布于 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)
希望能帮上忙!
发布于 2016-04-20 07:18:26
在我看来,datastax模型并不是很好。这种模式的问题是:
更好的解决方案是:问问自己如何查询这些数据。如果你说:我每年查询所有数据,使用年份也作为分析键。如果还需要查询一年以上的数据,则可以使用不同的年份创建两个查询。这是工作和性能更好。(瓶颈可能只是你的客户的网络)
我有一个问题要问你:你能汇总你的数据吗?Cassandra有一个名为counter的列类型。您可以创建一个java/scala应用程序,在该应用程序中,您可以在生成数据时对数据进行聚合。您可以为此使用流框架: Flink或Spark。(如果你需要的不仅仅是数数。)一种情况是:您聚合每个小时和一天的数据。你在你的流媒体应用程序中得到了你的数据。现在:您有一个用于小时数据的变量。你数数向上或向下或什么的。如果小时结束,则将此行放入每小时列系列和每日列系列中。在你的每日专栏中,你的家庭使用一个计数器。希望你能理解我的意思。
https://stackoverflow.com/questions/36722666
复制相似问题