MongoDB -聚合到另一个集合



我有一个进程,我目前正在使用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设置为REDUCE,完全匹配我的用例,但我在聚合框架中没有看到相应的功能。

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

您现在可以使用$out来完成这个操作,正如mongo

中所解释的那样

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

该命令具有以下语法,其中是保存聚合操作输出的集合。$out只允许出现在管道的末尾:

db.<collection>.aggregate( [
     { <operation> },
     { <operation> },
     ...,
     { $out : "<output-collection>" }
] )

聚合框架目前不能直接输出到另一个集合。然而,你可以在这个讨论中尝试答案:SO-questions-output聚合到新集合mapreduce要慢得多,我也一直在等待解决方案。您可以尝试Hadoop to Mongodb连接器,Mongodb网站支持该连接器。Hadoop在mapreduce上更快。但我不知道它是否适合你的具体情况。

hadoop + MongoDB连接器链接

祝你一切顺利。

相关内容

  • 没有找到相关文章

最新更新