Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data structures 如何最好地维护与时间相关的平均值数据库?_Data Structures_Moving Average - Fatal编程技术网

Data structures 如何最好地维护与时间相关的平均值数据库?

Data structures 如何最好地维护与时间相关的平均值数据库?,data-structures,moving-average,Data Structures,Moving Average,我想存储用户偶尔生成的一些数据的平均值,然后在我的应用程序中使用这些数据来预测未来的数据。现在我面临的问题是,这些数据在白天可能会发生很大的变化——例如,夜间进来的用户生成的值可能比早上进来的用户生成的值要低得多,所以仅仅保持一个简单的平均值并不能给我一个合理的预测精度 有些我需要存储某种基于时间的平均值-例如,一个简单的解决方案是存储一天中每小时的平均值-因此我保留24个平均值,一个用于在上午12点到凌晨1点之间生成数据的所有用户,第二个用于在凌晨1点到凌晨2点之间生成数据的所有用户,依此类推

我想存储用户偶尔生成的一些数据的平均值,然后在我的应用程序中使用这些数据来预测未来的数据。现在我面临的问题是,这些数据在白天可能会发生很大的变化——例如,夜间进来的用户生成的值可能比早上进来的用户生成的值要低得多,所以仅仅保持一个简单的平均值并不能给我一个合理的预测精度

有些我需要存储某种基于时间的平均值-例如,一个简单的解决方案是存储一天中每小时的平均值-因此我保留24个平均值,一个用于在上午12点到凌晨1点之间生成数据的所有用户,第二个用于在凌晨1点到凌晨2点之间生成数据的所有用户,依此类推

我对这种方法只有几个问题: 1.为了正确地预测数据,我仍然需要参考一些数值(比如说,2小时前和2小时后),而我可能没有足够的资源去做。我宁愿只参考一个值,如果它不太影响我的准确性的话。 2.我还想让这些数据只记住最近的时间——如果几年前生成的值非常低,但自上个月以来,每个人都生成了高值,那么对于我来说,要预测近期的数据,我需要能够做出更好的响应,而不是创建的所有数据的平均值能给我带来什么。为了论证起见,让我们假设90天以前的一切都不是真正相关的。 3.我希望使用平均值,而不仅仅是保留用户生成的所有数据的原因是,我希望有很多数据-我需要为每个10万到10万个数据点存储这些数据,至少为用户每周数百万个数据条目存储这些数据-至少。我还可能希望为每个数据点进一步分割数据-可能基于某些用户分类

如果有人能给我一些提示,告诉我如何在不需要庞大数据存储设施的情况下最好地计算平均数据,我将不胜感激:-)


[提示-是的,它适用于GIS应用程序]

您看过计算移动平均数的公式了吗?有很多方法。

我认为循环数据库(如rrdtool)非常适合您的目的。无论您最喜欢的语言是什么,都肯定有一个编程API

致以最良好的祝愿,
Noah

为什么不存储所有用户生成的值,然后在需要时精确计算出所需的值?当您不再需要旧数据时,您始终可以设置一个归档脚本来清除旧数据


这样,您就不会因为使用计算值进行计算而引入不精确性。

使用视图来计算您的期望值。这样,你就可以动态构造你的平均值,而且查询起来也很简单。

听起来你的数据集中有两个重要的信息位。数据有多少天了,一天中的哪个小时

未来时间的预测值可以作为数据集的加权平均值进行计算,权重随着年龄的增长而减小,并且随着预测值与时间的距离而减小

编辑:如果最重要的事情不是挂起数据:


按照您的建议设置垃圾箱(天真的解决方案)似乎是最合理的方法。当新数据进入并与装箱数据“平均”时,新数据可以被赋予更大的权重,以帮助最近的更改克服所有历史数据的“惯性”。

这难道不意味着我必须收集每个值事件吗?这将是非常困难的,我想,因为即使对于小型系统,我也期望每月超过100G的值。我可以忍受一点不准确-关于存储所有内容,请参阅我对@McWafflestix answer的评论。因此,基本上-存储所有内容,让RRD丢弃旧数据并对其进行平均。为一天中的不同时间提供不同的平均值怎么样?Guss,为此,您只需按如下方式使用rrdfetch:%rrd工具获取数据。rrd AVERAGE-r 900-s start_time-e end_time手册页(带示例)如下:Best,Noahmm。基于标准的加权平均值。如果我理解正确,这仍然意味着如果我想重新计算以考虑新数据,我必须保留所有历史值,对吗?我假设数据点将被保留,是的;如果您不想在系统中删除、存档或以其他方式移动早于X的数据,您可以实施一些策略,或者,您的权重函数将早于X的值的权重设置为零,并且它们不再起作用。好吧,我主要关心的是,由于采样池很大,我需要保留的数据的大小。我不想保留每一个数据点,但这仍然是一个好主意,谢谢。