我知道由于map/reduce需要写入集合,因此需要获取全局写锁,但如果我将输出设置为inline,这不是写入内存吗? 它似乎仍在获取锁。 这对于Mongo 2.0来说可能是正常的吗?
我知道由于map/reduce需要写入集合,因此需要获取全局写锁,但如果我将输出设置为inline,这不是写入内存吗? 它似乎仍在获取锁。 这对于Mongo 2.0来说可能是正常的吗?
使用内联模式,输出实际上被返回为单个文档,从而限制了最大文档大小,因此您可能会看到行为或响应时间的差异,因为返回了一个更大的结果?
就锁定而言,可以将Map/Reduce作业视为许多较小的操作(包括写入)。
首先,有一个JavaScript锁定,以便一次只有一个线程可以执行JS代码,因此是单线程的,至少目前是这样。但是,大多数MR的JS步骤(例如单个map())非常短,因此锁定很经常被释放。
MapReduce还执行几个非JavaScript操作,这些操作需要锁定:
您的内联模式通过将其作为内存映射来删除后两者,因此您不应该看到写入锁定,至少对于此作业而言。锁定可能是由于JS操作或读取而不是写入引起的吗?