0

我有一个使用事件中心接收数据的项目,每秒发送一次,数据由使用 SignalR 的网站接收,一切正常,我一直通过流分析作业将数据存储到 blob 存储中,但这真的很慢,而且我只收到 6 台设备的数据量,随着数据的增加,它会变得更慢,我需要访问数据以通过网站上的图表显示历史数据,并且然后用进来的实时数据来补充。

我真的不需要每秒存储一次数据,所以考虑只每 30 秒存储一次,但是到 SQL DB 中,我想要做的仍然是每秒接收数据,但每 30 秒存储一次,我尝试了一个翻滚窗口,但据我所知,这只是每 30 秒转储一次所有内容,而不是单个条目。

我是否想念翻滚、滑动和跳跃窗口,我猜我不能以这种方式使用它们?如果是这种情况,我猜唯一的方法就是将输出数据库作为输入,这样我就可以将时间戳与当前时间交叉引用?

除非有人有其他想法?任何帮助,将不胜感激。

谢谢

4

3 回答 3

1

我想念对翻滚、滑动和跳跃窗口的理解吗

您是正确的,这会将 Tumbling/Sliding/Hopping 窗口中的所有事件放在一起。但是,这仅在逐个组内有效,这需要对该组的聚合函数。

有一个聚合函数Collect()将在组内创建一个事件数组。

我认为,当您使用 将 30 秒翻转窗口内的每个事件分组时,这应该是可能的Collect(),然后在下一步中,CROSS APPLY每个记录应该输出 30 秒内收到的所有事件。

With Grouper AS (
    SELECT Collect() AS records
    FROM Input TIMESTAMP BY time
    GROUP BY TumblingWindow(second, 30)
)
SELECT 
    record.ArrayValue.FieldA AS FieldA,
    record.ArrayValue.FieldB AS FieldB
INTO Output
FROM Grouper
CROSS APPLY GetArrayElements(Grouper.records) AS record
于 2016-06-22T01:17:02.267 回答
0

如果您尝试每 30 秒将 30 个条目聚合到一个摘要行中,那么滚动窗口是一个不错的选择。像下面这样的东西应该可以工作:

SELECT System.TimeStamp AS OutTime, TollId, COUNT(*) as cnt, sum(TollCharge) as TollCharge
FROM Input TIMESTAMP BY EntryTime
GROUP BY TollId, TumblingWindow(second, 30)
于 2015-07-02T02:18:35.103 回答
0

感谢您的回复,我一直在与我在微软的联系人交谈,他提出了类似的建议,我也在网上的各种示例中找到了类似的内容。我真正想做的,只是每 30 秒用数据更新一次数据库。所以我会收到事件,存储它,直到 30 秒过去后我才会再次存储它。老实说,我不确定如何使用 ASA 工作,因为我需要记录上次更新的时间,实际上我从我的网站连接到事件中心,所以在接收器中,我将执行一个简单的检查,然后从那里存储数据。

于 2015-07-03T14:53:21.120 回答