MongoDB MapReduce每个键有很多emit()

Ell*_*nce 2 mapreduce mongodb

是否emit()保证将所有相同的密钥发送到reduce功能?

例如,如果你有100万个文件,emit()每个文件一次,但只有10个可能的emit()密钥(均匀分布),减少功能会在一次通话中受到100k排放的影响吗?

或者mongo将这些分开并逐步减少结果?如果是这样,它如何决定发送到reduce的值?

Jen*_*nna 5

相同键的所有emit()都将被发送到reduce函数,但它们不一定会立即发送到reduce函数(如果为特定键发出单个文档,则文档不会被传递给reduce函数).对于相同的键,可以多次调用Reduce,这就是为什么reduce函数的结果与map函数发出的文档的结构相匹配很重要的原因.

我将尝试找到有关mongo如何以及​​何时在将文档传递给reduce函数之前拆分文档的更多信息.

  • 基本上它取决于可用RAM的数量,MR试图不超过.出于这个原因,使用"排序"选项是有益的,这样所有相同的键一次到达内存(并一起缩小). (2认同)