【发布时间】:2017-08-19 22:00:15
【问题描述】:
我必须从各种物联网传感器收集时间序列数据。根据我的研究,有两种不同类型的时间序列数据流。
案例1:固定间隔
这种类型的数据流具有固定的间隔,并且很容易在给定范围内选择数据点。 计数器是一个典型的用例。
案例 2:基于事件
这种类型的数据流出现在不规则的时间点,并且仅在某些事情即将发生变化时出现。当传感器离线或在线时,一个典型的用例是电源开关。
要求
在给定时间窗口内选择所有受影响的数据点
数据模型
这是我的 cassandra 数据模型。流中的任何点都可以通过
CREATE TABLE sensor_raw (
sensor_id text,
bucket_id date,
sensor_time timestamp,
sensor_value double,
PRIMARY KEY ((sensor_id, bucket_id), sensor_time )
) WITH CLUSTERING ORDER BY (sensor_time DESC);
案例1的解决方案
这很简单,无需进一步讨论
SELECT * FROM sensor_raw where
sensor_id = '1' AND
bucket_id = '2017' AND
sensor_time >= '2017-01-01 10:00'
AND sensor_time < '2017-01-01 10:14'
案例2的解决方案
这里我遇到的问题是来自窗口外的事件可能会重叠到所选范围内。例如 E1
另一个问题是最后一个事件E3,该事件尚未结束。
我需要
-
从窗口开始到E1的部分持续时间。
要获取此信息,我必须从流中的第一个事件回顾以获取前一个事件。然后计算从窗口开始到 E2 的差值。
-
从E2到E3
的持续时间这很简单
-
从E2到窗口结束的持续时间(尚未结束)
必须检查最后一个事件是否与窗口结束具有相同的时间戳,如果不是,则最后一个事件仍在运行。
结果
问题
案例 2 有更好的数据模型吗?
有什么方法可以不用额外的查询来获得我需要的解决方案吗?
【问题讨论】:
标签: cassandra time-series data-modeling