2012-06-02 25 views
1

我必須使用大量數據的聚類算法來執行映射縮減操作。 我選擇MongoDB的可擴展性,優秀的文檔,BSon文檔存儲和許多其他強大的功能。如何加快MongoDB的Map Reduce?

但是,map-reduce操作是太慢。我的四核CPU只有一個核心使用。

CPU utilization Disk Utilization

我讀this document據我所知,是一個JavaScript的錯。

「的mongod的過程中只有一個線程在同一時間執行的Javascript」

如何提高呢?提高IO速度?

  • SSD存儲可能很有用?
  • 將整個MongoDB的數據加載到RAM上?

否則瓶頸只有 CPU和單線程算法,所以我必須要重新寫我用另一種語言算法,蒙戈外,充分利用多線程和多處理的?

回答

2

否則瓶頸僅僅是CPU和單線程算法

的問題是,沒有工作的並行,同時蒙戈使用的SpiderMonkey爲JS引擎。有一個長期計劃move to V8允許多線程執行js任務,但它不會使下一個版本(2.2)。

對於那些能夠切換到新的aggregation framework而不是map/reduce的人來說,地圖/縮小的一些緩慢將得到改進。不幸的是,它聽起來不像這樣會幫助你,因爲你使用自定義算法而不僅僅是聚合計算。

0

Map-reduce就像是在某些時候添加到MongoDB的附錄。如果您正在尋找MongoDB的可分區MR選項,請查看MongoDB Hadoop集成。爲了將其用於可擴展的企業解決方案,MongoDB的MR實現過於有限和可怕。

+0

感謝您的建議 –

0

MongoDB的的併發部分地圖,減少文檔表明,多個地圖,減少了將並行運行,雖然他們將在次阻止對方:

http://docs.mongodb.org/manual/applications/map-reduce/#map-reduce-concurrency

你的問題意味着你的處理算法是一個單一的map-reduce操作,所以如果你能夠將它分成多個map-reduce操作,你可能會看到一些好處。

但是,如果沒有IOwait並且單個處理器最大化,那麼似乎不太可能。