1

我已经使用 Mongo 的 map/reduce 有一段时间了,这会阻止其他操作,因为 2.0 中的 JS 引擎取出了锁(或者我相信)。我只是在 2.2 中试验新的聚合框架,并希望由于它只是读取它不需要锁定,但根据 db.currentOps() 它是锁定的。

因此,关于新的聚合框架(实际上是任何 MongoDB 操作),我想知道是否可以指示某个操作的优先级,以便 MongoDB 可以智能地将低优先级操作(例如一些后台更新)生成给时间敏感的高优先级操作?

4

1 回答 1

1

在此文档中,您可以看到它说 Map Reduce “允许大量并发操作,但仅限于其他 javascript 执行。”

所以这意味着它已经产生了对数据库的操作。另外,这主要是由于 map/reduce 是一个单线程的 JavaScript 操作。

但是,如果您想确保没有锁定,您可以将 Map Reduce 的输出写入另一个数据库,然后将集合移动到原始数据库。

>use admin
>db.runCommand( {renameCollection: "mapreducedb.mycol", to: "appdb.mycol"} )

聚合框架也一样

编辑:不能用于聚合框架(从 2.2 开始),因为它没有 {{$out}} 运算符来写入另一个数据库。但是聚合操作仍然可以安全地在生产/主数据库上执行,因为这些操作的屈服仍然会发生。

于 2012-09-20T14:00:56.623 回答