我正在阅读一篇关于数据流管理的长文,对滑动窗口和翻滚窗口之间的区别感到有些困惑。到目前为止,我已经了解翻滚窗口可以是基于时间的,并且具有固定的(开始,结束)点,当该窗口到期时“翻滚”。例如,基于时间的窗口可以是 1 分钟长。因此,每隔一分钟,窗口就会翻滚以处理数据集的聚合。
滑动窗户让我感到困惑。滑动窗口是否像基于计数的那样,当 x 个元组进入窗口时,窗口会翻滚。还是进入窗口的 x-recent 元组将成为窗口的一部分,并且较旧的元组将从该窗口中逐出。即随着新元组的到来而不断更新的窗口?
我正在阅读一篇关于数据流管理的长文,对滑动窗口和翻滚窗口之间的区别感到有些困惑。到目前为止,我已经了解翻滚窗口可以是基于时间的,并且具有固定的(开始,结束)点,当该窗口到期时“翻滚”。例如,基于时间的窗口可以是 1 分钟长。因此,每隔一分钟,窗口就会翻滚以处理数据集的聚合。
滑动窗户让我感到困惑。滑动窗口是否像基于计数的那样,当 x 个元组进入窗口时,窗口会翻滚。还是进入窗口的 x-recent 元组将成为窗口的一部分,并且较旧的元组将从该窗口中逐出。即随着新元组的到来而不断更新的窗口?
Tumbling windows (TW) 窗口内的所有元组同时到期。
滑动窗口 (SW) 只有一些元组在给定时间过期
示例 如果您有一个包含以下整数的窗口输入(符号整数(输入后的秒数)),假设 TW 是在 60 秒前创建的,并且两个窗口的时间限制都是 60 秒。
1 (0s), 2 (10s), 4 (24s), 8 (17s), 16 (40s)
假设 20 秒过去了,然后以下整数进入窗口。
7, 3, 6
现在之前的 TW 将已过期,并且将仅包含上述值。虽然 SW 将包含以下值
7, 3, 6, 1, 2, 4, 8
让我们将窗口函数视为传统的GROUP BY操作,它适用于基于时间的输入数据,应用给定的聚合函数并输出结果。
翻滚窗口 (TW)操作和滑动窗口 (SW)操作之间的主要区别在于所考虑数据点的交集,在前一种情况下为空,在后一种情况下可能为非空。
来自 Microsoft Azure Stream Analytics 的出色读物使插图与众不同。
X = 1
,Y = 10
然后窗口函数每秒回溯 10 秒,系统地丢弃最旧的数据点。让我们看一个以下时间序列的具体示例:
t0-> 5 7 4 3 1 1 3 t10-> 4 5 8 1 2 3 3 3 5 7 7 t20-> t30-> 3 3 4 t40->
考虑SUM
作为聚合函数和 SW 的平庸策略,即希望窗口 (HW):
t0
SW = TW = 0
;t10
SW = TW = 24
;t11
没有 TW 但是SW = 23
并且连续窗口之间的交点是7 4 3 1 1 3
;t11
没有 TW 但是SW = 21
并且连续窗口之间的交点是4 3 1 1 3 4
;t20
TW = SW = 48
;t21
没有 TW 但是SW = 44
连续窗口之间的交点是5 8 1 2 3 3 3 5 7 7
t30
TW = SW = 0
;t31
没有 TW 但是SW = 3
连续窗口之间的交集是空的,因为没有发生任何事件[t20, t30]
。SoftwareMill 首席技术官 Adam Warski 的另一本好书,它举例说明了如何使用 Spark、Flink、Akka 和 Kafka 等现代流技术。