2011-07-13 59 views
1

在使用db.currentOp(),我有时会看到这样的操作:为什么MongoDB中的读取有时会等待锁定?

{ 
     "opid" : 1238664, 
     "active" : false, 
     "lockType" : "read", 
     "waitingForLock" : true, 
     "op" : "query", 
     ..... 
     "desc" : "conn" 
    } 

为什么读操作需要等待一个锁?有没有办法告诉查询忽略任何挂起的写入,然后继续阅读?

+1

你肯定不想读半个写BSON的对象,是吗? –

回答

2

由于mongodb索引以同步方式工作,您无法通过查询忽略挂起写入。这是设计。

例如,RavenDB中的索引可以以异步和同步的方式工作。所以可能你需要ravendb(如果你在windows上);)

为什么读取MongoDB有时会等待锁定?

他们正在等待索引重建。

+0

呃......在你甚至推荐替代品之前,你应该问他们运行的是哪个平台。看起来Raven只能在Windows上运行。 – luckytaxi

+0

不,你可以用[mono]在linux上运行mongodb(http://stackoverflow.com/questions/6681106/why-do-reads-in-mongodb-sometimes-wait-for-lock/6681811#6681811)。但是,是的,它主要是针对Windows的项目。 –

+1

当有人说我想购买一辆4x4汽车时,你不会说“买本田公民”。 – luckytaxi