时间序列数据的MongoDB聚合
对于时间序列数据,我有以下文档结构(事件集合)。我根据上一篇文章决定了这种结构 } 现在,我试图从分钟数中获取平均cpu使用量,并将其存储为每小时一次。聚合和映射函数在列表和数组上运行良好,我无法从分钟中获得平均每小时数,我也希望获得平均每天数 我使用java作为编程语言。在应用程序中还是使用聚合框架进行计算更好时间序列数据的MongoDB聚合,mongodb,mapreduce,time-series,aggregation-framework,Mongodb,Mapreduce,Time Series,Aggregation Framework,对于时间序列数据,我有以下文档结构(事件集合)。我根据上一篇文章决定了这种结构 } 现在,我试图从分钟数中获取平均cpu使用量,并将其存储为每小时一次。聚合和映射函数在列表和数组上运行良好,我无法从分钟中获得平均每小时数,我也希望获得平均每天数 我使用java作为编程语言。在应用程序中还是使用聚合框架进行计算更好 非常感谢您的帮助。一个“预聚合”结构的要点是,您要向它写入内容,并且在执行过程中,$inc值。这就是为什么有所有的钥匙。以后再做聚合也是非常可怕的。所以,如果你所有的数据只进入“分钟”
非常感谢您的帮助。一个“预聚合”结构的要点是,您要向它写入内容,并且在执行过程中,
$inc
值。这就是为什么有所有的钥匙。以后再做聚合也是非常可怕的。所以,如果你所有的数据只进入“分钟”,那么你就做错了。要使用聚合框架并遍历命名键,您至少需要MongoDB 3.4。否则您将需要mapReduce来遍历关键点和聚合。谢谢您,尼尔。我们仍处于初始阶段,可以灵活地进行任何结构调整。这个想法是存储每分钟的cpu/内存统计数据。我们有一个仪表板来显示每月/每小时/分钟的统计数据。有什么更好的结构可以做到这一点。最好的方法是至少在写分钟的同时写“每小时”。根据需要,文档可能每天甚至每小时更新一次。出于同样的原因,您甚至可以每天和每月对文档和集合进行分离,还可以意识到您不需要实时完成所有操作,您可以“消息队列”操作并编写后续操作。这是一个非常广泛的课题,你应该进一步研究。所有这些问题都会吸引一些愚蠢的尝试,试图为您编写一个total查询。随着你的规模,这将是无用的。
{
"_id" : "06062017/cpu",
"metadata" : {
"host" : "localhost",
"createdDate" : ISODate("2017-06-09T11:18:56.120Z"),
"metric" : "cpu"
},
"hourly" : {
"0" : {
"total" : 2,
"used" : 1
},
"1" : {
"total" : 3,
"used" : 2
}
},
"minute" : {
"0" : {
"0" : {
"total" : 9789789,
"used" : 353
},
"1" : {
"total" : 0,
"used" : 0
}
},
"1" : {
"0" : {
"total" : 0,
"used" : 0
},
"1" : {
"total" : 234234,
"used" : 123
}
}
}