- 滚动窗口
滚动时间窗口将时间轴划分为固定大小且不重叠的时间段,每个时间段就是一个窗口。例如,若窗口大小 size 为 5 秒,那么时间轴会被划分为 [0, 5)、[5, 10)、[10, 15) 等一系列窗口。每个元素根据其时间戳会被分配到唯一的一个窗口中。
滚动方式:start = timestamp - (timestamp % size)
- timestamp:表示元素的时间戳,即元素发生的具体时间点。
- size:表示滚动时间窗口的大小,是一个固定的时间间隔,例如 5 秒、10 分钟等。
- timestamp % size:这是取模运算,得到的是 timestamp 相对于窗口大小 size 的余数。这个余数表示元素的时间戳距离它所在窗口起始时间的偏移量。
- start:表示元素所属窗口的起始时间。
- 滑动窗口
滑动时间窗口通过两个关键参数来定义:窗口大小(size)和滑动步长(slide)。窗口大小决定了每个窗口所涵盖的时间范围,而滑动步长则决定了窗口每隔多长时间滑动一次。
例如,假设窗口大小 size 为 5 秒,滑动步长 slide 为 2 秒。那么,窗口会从时间轴的起始点开始,第一个窗口是 [0, 5) 秒,然后窗口会以 2 秒为步长向右滑动,第二个窗口是 [2, 7) 秒,第三个窗口是 [4, 9) 秒,以此类推。可以看到,不同窗口之间存在重叠部分。
- start <= timestamp:确保窗口的起始时间不晚于元素的时间戳,这样元素才有可能在该窗口内。
- (timestamp - start) % slide == 0:表示元素的时间戳与窗口起始时间的差值是滑动步长的整数倍。这保证了元素能被正确地分配到合适的窗口中。
举个例子,假设窗口大小 size = 5 秒,滑动步长 slide = 2 秒,元素的时间戳 timestamp = 7 秒。我们来找出该元素所属的窗口:
首先,从 start = 0 开始检查:
timestamp - start = 7 - 0 = 7,7 % 2 != 0,所以元素不属于 [0, 5) 窗口。
接着,start = 2:
timestamp - start = 7 - 2 = 5,5 % 2 != 0,元素不属于 [2, 7) 窗口。
然后,start = 4:
timestamp - start = 7 - 4 = 3,3 % 2 != 0,元素不属于 [4, 9) 窗口。
再看,start = 6:
timestamp - start = 7 - 6 = 1,1 % 2 != 0,元素不属于 [6, 11) 窗口。
当 start = 7:
timestamp - start = 7 - 7 = 0,0 % 2 == 0,且 start <= timestamp 成立,所以元素属于 [7, 12) 窗口。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。