我知道,由于map / reduce写入集合,它需要获取全局写锁,但是如果我将输出设置为内联,那么这不会写入内存吗?它似乎仍然抓住了锁。这对Mongo 2.0来说可能是正常的吗?
答案 0 :(得分:4)
使用内联模式,输出作为单个文档返回,主要限制为最大文档大小,因此您可能会看到行为或响应时间的差异,因为您返回的结果较大?
就锁定而言,Map / Reduce作业可以被认为是许多较小的操作(包括写入)。
首先,有一个javascript锁,所以只有一个线程可以在一个时间点执行JS代码,所以单线程,至少现在。但是MR的大多数JS步骤(例如单个映射())非常短并且因此非常频繁地产生锁定。
还有一些非JavaScript操作,MapReduce执行锁定操作:
您的内联模式通过将其作为内存映射来删除后两个,因此您不应该看到写锁定,至少不能用于此作业。锁可能是因为JS操作或读取而不是写入吗?