MongoDB MapReduce作业是否会锁定数据库?我正在开发一个多用户MongoDB Web应用程序,我担心多用户冲突和性能。有没有人对我有任何智慧的话语?
答案 0 :(得分:7)
简单回答?有时......
这很大程度上取决于你如何使用map / reduce ......但根据我的经验,它从来都不是问题。
关于此问题的信息不多,但docs中明确说明有时锁定,但 “允许大量并发操作”。 强>
mongodb-user group asking中有几个关于此问题的问题......我见过offically的最佳答案是......“在1.4中它会产生但不是'尽管它应该很好,在1.5中它对其他请求更友好。“
这并不意味着根本不会阻塞,而是与阻止whole mongod process的db.eval()相比......这是你最好的选择。
那就是说,在1.7.2及更高版本中,db.eval()现在有一个 nolock 选项......
答案 1 :(得分:0)
不,mapreduce不会锁定数据库。请参阅“使用db.eval()”之后的the note here(它解释了为什么mapreduce比eval更适合使用,因为mapreduce不会阻塞)。
如果要运行大量mapreduce作业,则应使用分片,因为这样作业可以在所有分片上并行运行。遗憾的是,mapreduce作业无法在副本集中的辅助副本上运行,因为必须编写结果并且副本是只读的。
答案 2 :(得分:0)
在2.1.0版中,为输出选项添加了“nonAtomic”标志。