在Mongodb块上是否有内联mapreduce?

时间:2012-03-22 15:38:13

标签: mongodb

我知道,由于map / reduce写入集合,它需要获取全局写锁,但是如果我将输出设置为内联,那么这不会写入内存吗?它似乎仍然抓住了锁。这对Mongo 2.0来说可能是正常的吗?

1 个答案:

答案 0 :(得分:4)

使用内联模式,输出作为单个文档返回,主要限制为最大文档大小,因此您可能会看到行为或响应时间的差异,因为您返回的结果较大?

就锁定而言,Map / Reduce作业可以被认为是许多较小的操作(包括写入)。

首先,有一个javascript锁,所以只有一个线程可以在一个时间点执行JS代码,所以单线程,至少现在。但是MR的大多数JS步骤(例如单个映射())非常短并且因此非常频繁地产生锁定。

还有一些非JavaScript操作,MapReduce执行锁定操作:

  • 它从一个集合中读取(读取锁定产生每100个文档)
  • 它将文档插入临时集合(单次写入的写锁定)
  • 它创建最终集合或合并或替换现有集合(写锁定)

您的内联模式通过将其作为内存映射来删除后两个,因此您不应该看到写锁定,至少不能用于此作业。锁可能是因为JS操作或读取而不是写入吗?

相关问题