在MongoDB中聚合小数据的可靠有效方法是什么?
目前,我需要聚合的数据不到1 GB,但最高可达10 GB。我正在寻找实时策略或接近实时(每15分钟聚合一次)。
似乎像Map / Reduce,Hadoop,Storm这样的东西都被淘汰了。我知道触发器不存在,但我发现这个post可能是我的情况的理想选择。在MongoDB中创建触发器是实时小数据聚合的理想解决方案吗?答案 0 :(得分:1)
MongoDB有两个用于聚合数据的内置选项 - aggregation framework和map-reduce。
聚合框架更快(作为本机C ++代码执行而不是JavaScript map-reduce作业),但在支持的各种聚合中更受限制。 Map-reduce非常通用,可以支持非常复杂的聚合,但比聚合框架慢,而且编码起来更加困难。
这些中的任何一个都是近实时聚合的好选择。
需要考虑的另一个考虑因素是,从2.4版本开始,聚合框架返回包含其结果的单个文档,因此仅限于返回16MB的数据。相比之下,MongoDB map-reduce作业没有这样的限制,可以直接输出到集合。在即将发布的MongoDB 2.6版本中,聚合框架还可以使用新的$out运算符直接输出到集合。
根据您的用例说明,我建议使用map-reduce,因为我假设您需要输出超过16MB的数据。另请注意,在第一次map-reduce运行之后,您可以运行仅在新/更改的数据上运行的incremental map-reduce个作业,并将结果合并到现有的输出集合中。
如您所知,MongoDB不支持触发器,但您可以通过拖尾MongoDB oplog轻松地在应用程序中实现触发器。这个blog post和SO post很好地涵盖了这个主题。