Algorithm 如果我有一个15分钟的滑动窗口,我如何收集每日/每周的总量?

Algorithm 如果我有一个15分钟的滑动窗口,我如何收集每日/每周的总量?,algorithm,analytics,sliding-window,Algorithm,Analytics,Sliding Window,我有一个15分钟的滑动窗口,可以在任何给定的时间在该窗口内聚合该数据。由于内存限制,我无法增加窗口的大小。我仍然认为我应该能够在一天/一周内获得总量(如基本上是频率计数器的趋势项目等) 它不需要非常精确的计数,只需要过滤掉前3-5名 每15分钟运行一次cron作业并将其放入4(15分钟)计数器是否有效 我能在总量上得到某种滚动计数器吗 还有其他方法吗 我的建议是指数衰减的移动平均线。对于Unix负载平均值,也可以这样做。(有关说明,请参阅。) 您要做的是选择一个常数0

我有一个15分钟的滑动窗口,可以在任何给定的时间在该窗口内聚合该数据。由于内存限制,我无法增加窗口的大小。我仍然认为我应该能够在一天/一周内获得总量(如基本上是频率计数器的趋势项目等)

它不需要非常精确的计数,只需要过滤掉前3-5名

  • 每15分钟运行一次cron作业并将其放入4(15分钟)计数器是否有效
  • 我能在总量上得到某种滚动计数器吗
  • 还有其他方法吗

  • 我的建议是指数衰减的移动平均线。对于Unix负载平均值,也可以这样做。(有关说明,请参阅。)

    您要做的是选择一个常数
    0
    ,然后每5分钟更新一次,如下所示:

    moving_average = k * average_over_last_5_min + (1-k) * moving_average
    
    这将表现为过去
    5/k
    分钟的平均值。因此,如果你设置
    k=1/(24.0*60.0/5.0)=0.003472222
    ,那么你可以得到大致的每日移动平均值。除以7,你可以得到一个大致的周移动平均值


    平均值并不准确,但应该可以很好地确定最近的趋势。

    数据是什么?(一系列数值?)您要计算什么“聚合”?有些(如总和或平均数)很容易在单次传递的O(1)空间中进行计算,而另一些(如中位数)则不可能在单次传递的O(1)空间中进行计算。您能提供其他详细信息吗?