Php 最近的平均值,未完整记录所有数据

Php 最近的平均值,未完整记录所有数据,php,performance,language-agnostic,Php,Performance,Language Agnostic,这主要是一个性能问题。这有助于获得过去N(30?)值的当前平均值。这里的上下文是监视服务器中过去N个数据请求的平均执行时间。而显而易见的解决方案是记录过去的所有N个请求,其中所有N个请求都被读取并制成表格。创建与相关数据请求相关的性能命中 由于这主要是作为一种测量手段,而不是一个完美的运行估计,问题是?以最有效的方式解决这个问题 虽然解决方案可能与语言无关,但我将使用php实现:)而不是保存最后的N个值,而是使用预定义的bucket大小将值组织到“bucket”中,并且对于每个bucket,只保

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

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


虽然解决方案可能与语言无关,但我将使用php实现:)

而不是保存最后的N个值,而是使用预定义的bucket大小将值组织到“bucket”中,并且对于每个bucket,只保存bucket中所有值的总和

只要存储桶已满,就可以删除最旧的存储桶。(最好的方法是使用环形缓冲区)


这允许您将内存使用量减少一倍BUCKET_SIZE,但显然您的平均值不再超过最后N个值,而是超过最后N到N+BUCKET_SIZE。

不是保存最后N个值,而是使用预定义的BUCKET SIZE将您的值组织在“BUCKET”中,并针对每个BUCKET,仅保存存储桶中所有值的总和

只要存储桶已满,就可以删除最旧的存储桶。(最好的方法是使用环形缓冲区)


这允许您将内存使用量减少一个BUCKET\u SIZE的因子,但很明显,您的平均值不再超过最后N个值,而是超过了最后N到N+BUCKET\u SIZE。

因此平均值将基于最近的BUCKET\u SIZE。。。虽然存在轻微的延迟,(对于数据填充一个存储桶而言),但其占用空间肯定要小得多:)不,平均值将基于所有存储桶的平均值,包括“半满”一个-只需计算所有存储桶的总和,然后除以
(存储桶大小*满存储桶的数量)+满存储桶中的项目数量
。这样,你甚至没有任何延迟,但是,当一个桶满了,最旧的桶被一个新的空桶替换时,你的值可能会有轻微的“跳跃”。因此平均值将基于最近的桶。。。虽然存在轻微的延迟,(对于数据填充一个存储桶而言),但其占用空间肯定要小得多:)不,平均值将基于所有存储桶的平均值,包括“半满”一个-只需计算所有存储桶的总和,然后除以
(存储桶大小*满存储桶的数量)+满存储桶中的项目数量
。这样,您甚至没有任何延迟,但是,每当一个桶满了,最旧的桶被新的空桶替换时,您的值可能会有一个轻微的“跳跃”。