Mongo上的内联map/reduce会阻塞吗?

3

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

1个回答

4

使用内联模式,输出实际上被返回为单个文档,从而限制了最大文档大小,因此您可能会看到行为或响应时间的差异,因为返回了一个更大的结果?

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

首先,有一个JavaScript锁定,以便一次只有一个线程可以执行JS代码,因此是单线程的,至少目前是这样。但是,大多数MR的JS步骤(例如单个map())非常短,因此锁定很经常被释放。

MapReduce还执行几个非JavaScript操作,这些操作需要锁定:

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

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


哦,还有参考资料,大部分信息在这里:http://www.mongodb.org/display/DOCS/How+does+concurrency+work#Howdoesconcurrencywork - Adam Comerford
谢谢 - 我的地图有一些字符串比较,可能会相当慢,所以这可能会减慢速度。希望2.2能够消除单个JS限制。 - Nic Cottrell
1
https://jira.mongodb.org/browse/SERVER-4258 是你想要关注的 - 它在开发2.1分支中,但需要从SpiderMonkey切换到V8才能工作。 你可以使用v8构建dev分支来尝试它:http://www.mongodb.org/display/DOCS/Building+with+V8 - Adam Comerford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接