我想按某些属性计算请求并按特定时间段(可能按秒)汇总它们,然后计算最近 10 秒、最近 2 分钟等的运行平均值/最大值/分钟。
(对我而言)显而易见的方法是只列出秒数,当我需要移动/运行平均值时,只需返回列表中适当的时间量并计算平均值。除了围绕存储聚合值以在较长时间段内使用的一些明显优化之外,我还缺少什么想法?
最佳答案
我更喜欢指数移动平均线
,因为它更简单并且不需要将值保存在数组中
这是我以前用过的函数
func MovingExpAvg(value, oldValue, fdtime, ftime float64) float64 {
alpha := 1.0 - math.Exp(-fdtime/ftime)
r := alpha * value + (1.0 - alpha) * oldValue
return r
}
和代码示例
关于statistics - 以秒计算事物并保持运行平均值的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12538959/