MongoDB-Map的锁是如何工作的?

MongoDB-Map的锁是如何工作的?,mongodb,cron,mapreduce,Mongodb,Cron,Mapreduce,在对集合执行操作时,MongoDB map是否减少了对集合的锁定 我有一些被应用程序广泛和密集使用的集合。Map/Reduce通过cron作业每10分钟在后台运行一次,在广泛使用的集合上运行 我想知道Map/Reduce是否很有可能因为其他操作(插入、更新和大部分读取)正在该集合上进行而无法很好地执行。特别是,我想知道Map/Reduce是否会干扰用户对集合执行的正常操作。MapReduce,如果输出到集合,则在写入时会发生多个写锁定(任何创建/更新集合的操作都会发生这种情况)。如果您正在做一个

在对集合执行操作时,MongoDB map是否减少了对集合的锁定

我有一些被应用程序广泛和密集使用的集合。Map/Reduce通过cron作业每10分钟在后台运行一次,在广泛使用的集合上运行


我想知道Map/Reduce是否很有可能因为其他操作(插入、更新和大部分读取)正在该集合上进行而无法很好地执行。特别是,我想知道Map/Reduce是否会干扰用户对集合执行的正常操作。

MapReduce,如果输出到集合,则在写入时会发生多个写锁定(任何创建/更新集合的操作都会发生这种情况)。如果您正在做一个在线MR,那么您可以避免这种锁定(但对结果大小有限制)。即便如此,仍然存在读取锁和Javascript锁(目前mongoDB上服务器端JS的单线程)

此处对此进行了详细说明(如有更改,将进行更新):


注意:V8 JS引擎迁移问题的SpiderMonkey是您需要关注的问题。

可能重复:好的,谢谢,所以这是有点可能的。如果我理解正确,当mapreduce完成工作并在“temp\u result\u collection”上输出时,从mapreduce输出完成后,mongodb锁和其他操作的同时请求在队列中吗?但如果输出需要几秒钟(例如10秒,因为它是大输出),这不是问题。但当mapreduce从集合中读取数据进行处理(运行emit和reduce函数)时,它会保留初始集合的锁吗?我这样问是因为我在mongodb中实现了一个投票系统,我将投票存储为diff collection中每个对象的嵌套文档“它从一个集合中读取(读取锁生成每100个文档)”,所以,如果用户同时查阅其中一个被锁定的记录,用户会等待它在这100个文档上发布吗?,所以读操作由用户执行,它被放入队列中,所以它不会返回错误,对吗?首先,要充分利用让步,请确保您使用的是改进了让步的2.x版本(当前为2.0.4)。100个文档不是锁定单元,而是MR作业取出一个读锁(允许多个读锁),并每100个文档生成一个读锁。为什么?因为写锁是独占的,所以如果写操作正在等待,那么成品率将允许该写操作发生。请查看德怀特在10gen.com上的演示文稿,以获得关于所有这些工作原理的更详细、更翔实的解释。