2014-01-10 24 views
0

在MongoDB中聚合小数据的可靠和有效的方法是什么?(实时)小数据聚合MongoDB:触发器?

目前,我需要汇总的数据不足1 GB,但最高可达10 GB。我正在寻找实时策略或接近实时(每1​​5分钟汇总一次)。

看起来好像Map/Reduce,Hadoop,Storm等都已经被杀死了。我知道触发器不存在,但我发现这一个post,这可能是我的情况的理想选择。在MongoDB中创建触发器是实时小数据聚合的理想解决方案吗?

+0

您是否考虑过mongodb的内置[聚合管道](http://docs.mongodb.org/manual/core/aggregation-pipeline/)框架? –

+0

我对此很新。我将如何使它实时? – krikara

+0

起初我并不完全明白你的问题。看看[这](http://stackoverflow.com/questions/5807618/strategies-for-real-time-aggregations-in-mongodb?rq=1)的问题。他有类似的问题 –

回答

1

MongoDB有两个内置选项用于汇总数据 - aggregation frameworkmap-reduce

聚合框架速度更快(与本地C++代码相对于JavaScript map-reduce作业执行),但受支持的聚合类型更加受限。 Map-Reduce功能非常全面,可以支持非常复杂的聚合,但比聚合框架慢,编码更困难。

这些都是近实时聚合的好选择。

需要考虑的另一个考虑因素是,从2.4版本开始,聚合框架返回包含其结果的单个文档,因此仅限于返回16MB的数据。相比之下,MongoDB map-reduce作业没有这种限制,可以直接输出到集合中。在即将发布的2.6版本的MongoDB中,汇总框架还可以使用新的$out运算符直接输出到集合。

根据你的用例描述,我推荐使用map-reduce,因为我假设你需要输出超过16MB的数据。另请注意,在第一次map-reduce运行之后,您可以运行仅在新/更改的数据上运行的incremental map-reduce作业,并将结果合并到现有的输出集合中。如您所知,MongoDB不支持触发器,但您可以通过拖拽MongoDB oplog轻松实现应用程序中的触发器。这个blog post和这个SO post很好地涵盖了这个话题。

+0

我不需要缩小地图,只需要聚合框架。我感到困惑的是如何实时运行它。一个简单的例子是我有大约5 KB的100,000条目。从每个条目中,我想要拉出车牌号和车主;创建一个包含所有许可证和名称的新文件。但我希望这是实时的,不太明白如何执行此操作。 – krikara

+0

@ krikara,谢谢澄清。我根据这些额外信息编辑了我的上述答案。 –

+0

+1更新。现在,从我从网上阅读的内容看来,Map Reduce在我的工作中可能会很慢。实际上,插入到我的MongoDB中的所有数据都是元数据。然后我需要处理这些数据来创建报告。我应该使用MongoDB来聚合这些数据,还是应该将所有元数据发送到不同的服务器以在那里处理它?如果后一种情况属实,我应该用什么来聚合(Javascript,Storm)?虽然每个条目大约为5 KB,但一天处理的数据量大约为5 GB。感谢您的帮助〜 – krikara