我有一个数据记录应用程序。我每30秒记录10,000个温度。我需要能够每小时/每天/每周计算10,000个项目中每个项目的最小/最大/平均温度。可以在服务器上执行最小/最大/平均计算,还是需要将每个文档下载到客户端以进行计算?
安德鲁
答案 0 :(得分:0)
在服务器上的DB /中计算或存储摘要。如果这很重要,也要保留原始数据。
早期计算摘要&将其发送到客户端/人员级别,远比运送大约10,000个通常无法钻取的样本更有效。
一个非常好的总结,包括平均值,最小值,最大值和最小值对于几乎所有目的,标准偏差在统计上是全面的。
当客户真正需要时,您可以关闭大数据集(10k样本)并显示它。
答案 1 :(得分:0)
当然你想在服务器上计算它,但你可以考虑多种方法:
您可以将这些文件存储在您为每个样本手动更新的特定文档中。这可能有用,但是你会对单个文档施加很大的压力,这可能会导致并发问题。
您可以编写Map / Reduce索引来计算总数。每次编写新文档时,RavenDB都会使用新的总计更新您的索引。您可以将总值除以总计数以获得平均值,并且您可以轻松使用最小和最大函数。由于您希望按不同的时间间隔查看这些结果,因此您需要多个索引。
我实际上写了一个小型的演示程序。它不是温度,而是记录模拟压力表的PSI值。但概念是相同的。如果你仔细阅读这些评论,那么你可以选择一些快捷方式。
项目现场:Raven Sensors
当我当前版本的RavenDB为2.0.2261时,我写了这个。我暂时没有更新它,但它应该仍然有用并且相关。
我还没有做太多,但是RavenDB 2.5添加了一个名为Dynamic Aggregation的功能。它也通过工作室曝光Dynamic Reporting。从本质上讲,这会在查询时进行聚合。您可能会发现表达您感兴趣的聚合要容易得多,但它可能比map-reduce方法慢得多。你可能想试验一下。性能差异可能归结为正在聚合的集合中的项目数。