2012-06-28 36 views
2

是否所有emit()都保证被发送到reduce函数?MongoDB MapReduce许多emit()的每个键

例如,如果你有这样的每个每个文档,但只有10个可能的emit()键(涂抹均匀)emit()一旦将精简函数获取具有100K排放在一个单一的通话抨击百万文件?

还是会mongo分裂这些并逐步减少结果?如果是的话,它如何决定发送给reduce的值有多少?

回答

5

同一个键的所有emit()s将被发送到reduce函数,但它们不一定会立即发送到reduce函数(如果单个文档是针对特定键发出的,文件不会传递给reduce函数)。对于同一个键,可能会多次调用Reduce,这就是减少函数的结果与map函数发出的文档结构相匹配的原因。

我会试着找出关于mongo在将文档传递给reduce函数之前如何分割文档的逻辑的更多信息。

+2

基本上它由可用RAM的数量决定,MR尝试不超过。出于这个原因,使用“排序”选项是有益的,以便所有相同的密钥一次到达内存(并一起减少)。 – Jenna

+0

如果我们想在结果中包含单个文档的关键字,解决方案是什么? –