2012-11-16 90 views
2

無論何時我被CPU綁定(在SSD上運行),我都會看到Mongo只在我的機器上使用一個cpu。我有8個。Mongo可以利用它嗎?最好在紅寶石中,如果不是,我可以很容易地轉換。多線程可能與Mongo?

+1

Ruby如何適應?你想要多線程的客戶端代碼? – Thilo

+0

好吧,如果Mongo不能,我沒關係在客戶端做多線程作爲黑客。 –

+0

另請參見:[MongoDB是否僅限於單個內核?](http://stackoverflow.com/questions/9773606/is-mongodb-somehow-limited-to-a-single-core)。 – Stennie

回答

-1

隨着MongoDB的2.2(這是Mozilla的SpiderMonkey的)當前的JavaScript引擎,在mongod的過程中只有一個線程在同一時間執行JavaScript,因此JS操作,包括地圖/減少和聚合將被鎖定到單個線程中。您可以通過插入hadoop適配器來執行併發映射/減少操作。不使用javascript的I/O操作可以在遵從v2.2中引入的某些locking rules的同時運行,因此可以以有限的方式實現並行性。如果您正在運行mongos(sharding your data),則可以實現稍微更好的併發性,但通常在單個mongod進程中,您將被限制爲單個線程。

+0

你的意思是它沒有爲單個操作使用多個線程,但是如果你運行10個併發查詢,它們可以同時進行,不是嗎? – Thilo

+0

MongoDB 2.2及更早版本默認使用Mozilla的[SpiderMonkey](http://en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine))JavaScript引擎。如前所述,只有一個線程會執行JavaScript,但像MapReduce這樣的操作確實允許[併發](http://www.mongodb.org/display/DOCS/How+does+concurrency+work)。您鏈接的服務器問題是指即將對Google [V8](http://en.wikipedia.org/wiki/V8_(JavaScript_engine))JavaScript引擎進行的更改。 – Stennie

+0

注意:您已經可以[從V8開源](http://www.mongodb.org/display/DOCS/Building+with+V8),但這並不一定能保證更高的性能。一些最終修復和測試正在爲2.3開發週期(見[SERVER-2407](https://jira.mongodb.org/browse/SERVER-2407))進行,之後V8應該成爲默認的JavaScript引擎。 – Stennie