我想要对一些指标执行map-reduce操作,并希望存储其聚合和时间序列的结果。
存储聚合结果似乎非常简单,但如何以时间序列的方式存储结果,即每当map-reduce函数运行时,该时间间隔的值也应该记录在结果集合中。(即时间序列数据)
假设我的map-reduce聚合中有以下结果:
> db.result.find()
{ "_id" : { "eventId" : 1}, "value" : { "sum" : 21 } }
{ "_id" : { "eventId" : 2}, "value" : { "sum" : 31 } }使用map_reduce聚合框架,我可以很容易地实现上述目标。
我希望结果也存储在时间序列中,如下所示:
> db.result.find()
{ "_id" : { "eventId" : 1}, "value" : { "sum" : 21, "ts": {1: 15, 2: 4, 3: 2 } } }
{ "_id" : { "eventId" : 2}, "value" : { "sum" : 31, "ts": {1: 12, 2: 12, 3: 7 } } }现在,只要map-reduce函数运行,它就应该更新结果集合。
我尝试了很多方法,但都不能成功。你知道我怎么才能做到吗?
此外,如果在相同的map-reduce函数调用下也能做到这一点,那就太好了。
发布于 2014-01-04 01:40:05
这类时间序列数据的一般建议是使用pre-aggregated reports。
如果这是不可能的,首先考虑使用aggregation pipeline而不是map-reduce。如果你的用例允许,它会变得更快更容易。
使用聚合管道和map-reduce,您可以使用结果创建所需的文档。setOnInsert可能会有所帮助。
https://stackoverflow.com/questions/20907895
复制相似问题