2011-08-31 56 views
1

这主要是一个性能问题。它有助于获得过去N(30?)值的当前平均值。这里的上下文将是监视服务器中过去N个数据请求的平均执行时间。尽管显而易见的解决方案是记录所有N个请求,其中所有N个请求都被读取并列表。创建相对于有问题的数据请求的性能命中。最近一段时间没有完整记录所有数据

由于这主要是作为一种度量手段,而不是一个完美的运行估计,所以这个问题呢?以最有效的方式解决这个问题。

虽然解决方案可能是语言中立的,我会在PHP :)

回答

1

而是保存最后N个值的实现,与预定义的水桶大小的组织你的价值观在“桶”,并为每个桶,只保存桶中所有值的总和。

每当存满存储区时,您可以删除最旧的存储区。 (最好的办法是做一个环形缓冲区)

这可以让你的内存使用量减少BUCKET_SIZE,但显然你的平均值不会超过最后N个值,但是在最后的N到N + BUCKET_SIZE。

+0

所以平均值将基于最近的桶......虽然存在一个轻微的延迟,(对于数据来填充桶)它肯定是一个更小的足迹:) – PicoCreator

+0

不,平均值将基于平均包括“半满”在内的所有存储桶,只计算所有存储桶的总和,并除以“(BUCKET_SIZE * NUMBER_OF_FULL_BUCKETS)+ NUMBER_OF_ITEMS_IN_HALF_FULL_BUCKET”。 这样,您甚至不会有任何延迟,但是,每当一个桶已满并且最旧的一个被替换为新的空桶时,您的值可能会出现轻微的“跳跃”。 – ChristophK