【问题标题】:Does MongoDB MapReduce lock the databaseMongoDB MapReduce 是否锁定数据库
【发布时间】:2011-07-30 14:36:25
【问题描述】:

MongoDB MapReduce 作业是否锁定数据库?我正在开发一个多用户 MongoDB Web 应用程序,并且担心多用户冲突和性能。有人对我有什么智慧之言吗?

【问题讨论】:

  • 智慧之言,请注意我对已接受答案 WRT 并行性的评论。

标签: mongodb mapreduce


【解决方案1】:

简单的答案?有时...

这在很大程度上取决于您如何使用 map/reduce ...但根据我的经验,这从来都不是问题。

这方面的信息不多,但在docs 中明确指出,有时会锁定,但它“允许大量并发操作。” em>

在 mongodb-user 组 asking 中有几个关于这个的问题......我见过的最好的回答 offically 是......“在 1.4 中它产生但不如它应该在 1.5 中对其他请求更加友好。”

这并不意味着它根本不会阻塞,但与阻塞whole mongod process 的 db.eval() 相比……这是你最好的选择。

也就是说,在 1.7.2 及更高版本中,现在有一个 nolock 选项用于 db.eval() ...

【讨论】:

  • 但是请记住,最重要的问题被掩盖了:MapReduce 锁定了整个 JavaScript 上下文,每个 mongod 只有一个。因此,您不能在单个 MongoDB 服务器上同时运行多个 MapReduce 作业;小心使用它作为查询机制。
【解决方案2】:

不,mapreduce 不会锁定数据库。请参阅 the note here,就在“使用 db.eval()”之后(它解释了为什么 mapreduce 可能比 eval 更适合使用,因为 mapreduce 不会阻塞)。

如果您要运行大量 mapreduce 作业,您应该使用分片,因为这样作业可以在所有分片上并行运行。不幸的是,mapreduce 作业不能在副本集中的辅助节点上运行,因为必须写入结果并且副本是只读的。

【讨论】:

    【解决方案3】:

    在 2.1.0 版本中,在输出选项中添加了一个“nonAtomic”标志。

    见:https://jira.mongodb.org/browse/SERVER-2581

    【讨论】:

      猜你喜欢
      • 2017-07-20
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多