是MongoDb映射到另一个集合比`out inline`更有效率的内存

我正在运行MongoDb与512兆内存的实例(以及一些其他的Web应用程序),所以每兆字节计数

MongoDb文档指出out: { inline: 1 }

在内存中执行map-reduce操作并返回结果。

这表明其他出types不在内存中执行。将mapReduce结果返回到另一个集合会更有效率 – 假设最终我仍然需要读取集合数据以将其返回给客户端

考虑到从应用程序调用Map Reduce时,内联只能真正有用,所以我应该声明Map Reduce不是为了在应用程序中运行而devise的,而应该尝试转换到聚合框架或其他东西,如果可以的话。

内联限制为16MB(单个BSON文档)。 考虑到这一点,你可能会发现,写出一个集合实际上是慢的,然后再读取该集合,而不是只是在内存中完成。

写入另一个集合,然后再读取它不需要在内存中保存整个数据集(“数据集”是指集合数据集)。 它可以安全地写入/读取磁盘。

当你使用“out:inline”时,它被存储在内存中。 如果内存不足,则会发生一些交换/转出。

无论如何,为了获得好的性能数字,你应该有足够的内存来保存所有的热门数据。 磁盘很慢。

所有这一切,内联或不内联,可能没有什么区别。

我会说:是的,确实有更多的内存有效地让mapReduce将结果存储在一个集合中。

如果使用inline ,则MR操作的结果将作为一个数组返回,这意味着所有结果都存储在内存中,然后交给调用代码。 如果将结果存储在集合中,则可以使用游标或stream来防止在返回客户端之前将所有内容读入内存。