2012-11-16 48 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