當前位置:成語大全網 - 新華字典 - Mongodb的MapReduce很慢,有沒有辦法提高性能

Mongodb的MapReduce很慢,有沒有辦法提高性能

使用排序

我在之前的這篇文章中簡要說明了使用排序對於MR的好處,這是壹個鮮為人知的特性。在這種情況下,如果處理未排序的輸入,意味著MR引擎將得到隨機排序的值,

基本上沒有機會在RAM中進行reduce,相反,它將不得不通過壹個臨時collection來將數據寫回磁盤,然後按順序讀取並進行reduce。

使用多線程

MongoDB對單獨的MR作業並不使用多線程——它僅僅對多作業使用多線程。但通過多核CPU,在單個服務器使用Hadoop風格來並行作業非常有優勢。我們需要做的是把輸入分成幾塊,通過各個塊來加速壹個MR作業。也許數據集有簡單的方法來分割,但其他使用splitVector命令(不明確)可以使妳很快的找到分割點

使用多數據庫

問題是在多線程之間會有很多鎖競爭。在上鎖時,MR並不是那麽無私的(它每1000次讀操作就會產生壹次鎖定),而且MR任務還會執行許多寫操作,導致線程最終都會在等待另壹個線程。由於每個MongoDB數據庫都有私有鎖,讓我們嘗試為每壹個線程使用壹個不同的輸出數據庫

使用純JavaScript模式

當把輸入數據拆分到不同線程上去的時候,發生了壹些有趣的事情:每個線程現在有大約250000個不同的值來輸出,而不是1百萬。這意味著我們可以使用“純JS模式”,它可以通過使用jsMode:true來開啟。開啟後,MongoDB在處理時將不會把對象在JS和BSON之間來回翻譯,相反,它使用壹個限額500000個key的內部JS字典來化簡所有對象。