是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来防止在返回客户端之前将所有内容读入内存。