2011-07-13 40 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

相關問題