1
db.update_queue.find().explain();
{
        "cursor" : "BasicCursor",
        "nscanned" : 6046,
        "nscannedObjects" : 6046,
        "n" : 6046,
        "millis" : 5,
        "nYields" : 23,
        "nChunkSkips" : 0,
        "isMultiKey" : false,
        "indexOnly" : false,
        "indexBounds" : {

        }
}

From the net i found out this

nYields 是查询被时间分割的次数。所以这意味着对于这个查询,其他查询被允许了 23 次。

What does this mean actually ??

这是我对上述内容的理解

这是否意味着该查询等到执行了 23 个查询后才执行当前查询?

4

2 回答 2

4

这要归功于 MongoDB 的并发特性,这些特性在最近的版本中更加突出。有一个特征是让数据从 RAM 出来的操作来交换那些在 RAM 里有数据的操作。

这意味着 MongoDB 永远不会对您的操作进行空闲排队,并且通常可以加快操作速度。

nYields表示此操作有多少次成为 MongoDB 中的并发算法的牺牲品,因此对于数据在 RAM 中的其他操作而言,它会自行消退。

编辑

作为编辑,形成文档页面:http://docs.mongodb.org/manual/faq/concurrency/#does-a-read-or-write-operation-ever-yield-the-lock

长时间运行的读取和写入操作,例如查询、更新和删除,在许多情况下都会产生。在 MongoDB 2.0 中,操作基于时间片和等待主动持有锁的操作数产生。

然而:

在 2.2 之后,更多的自适应算法允许操作基于预测的磁盘访问(即页面错误)产生。

因此,在某些情况下,不仅仅是错误会影响屈服,但我相信这个查询比任何事情都错误。

于 2013-09-11T10:53:58.727 回答
0

文档说:

解释.n产量

nYields 是反映此查询产生读锁以允许等待写入执行的次数的数字。

于 2013-09-11T10:46:41.540 回答