4

我有一个进程,我目前正在使用 Mongo 的 Map/Reduce 框架,但它的性能不是很好。这是一个非常简单的聚合,我将 3 个字段分桶,返回 4 个不同字段的总和,并传递另外 4 个字段的值(在每个桶中都是常数)。

由于 [ MongoDb 2.2、2.4 和 2.6 中的 Map-Reduce 性能] 中描述的原因,我想将其转换为聚合框架以获得更好的性能,但我认为有 3 件事会阻碍:

  1. 总结果可能很大,超过 Mongo 的 16MB 限制,即使结果中的任何一个文档都非常小。
  2. 我可以直接映射/减少到另一个集合,但聚合框架只能内联返回结果(我认为?)
  3. 对于随着更多数据到达源集合中的增量更新,我可以映射/减少MapReduceCommand.OutputType(在 Java 中)设置为REDUCE,完全匹配我的用例,但我在聚合框架中看不到相应的功能。

在聚合框架中是否有解决这些问题的好方法?服务器现在是 2.4.3 版本 - 如果有新功能,我们可能会根据需要进行更新。

4

2 回答 2

4

您现在可以使用$out来执行此操作,如 mongo 中所述

$out 获取聚合管道返回的文档并将它们写入指定的集合。$out 运算符允许聚合框架返回任意大小的结果集。$out 运算符必须是管道中的最后一个阶段。

该命令具有以下语法,其中 collection 将保存聚合操作的输出。$out 只允许在管道结束时使用:

db.<collection>.aggregate( [
     { <operation> },
     { <operation> },
     ...,
     { $out : "<output-collection>" }
] )
于 2014-04-07T23:52:09.727 回答
1

聚合框架目前无法直接输出到另一个集合。但是,您可以在此讨论中尝试答案: SO-questions-output aggregate to new collection mapreduce 速度较慢,我也一直在等待解决方案。您可以尝试 Hadoop 到 Mongodb 连接器,该连接器在 mongodb 网站中受支持。Hadoop 在 mapreduce 上更快。但我不知道它是否适合您的具体情况。

链接到 hadoop + MongoDB 连接器

一切顺利。

于 2013-06-20T16:11:35.970 回答