我有一個擁有數千條記錄的mongodb,它擁有很長的向量。 我正在尋找輸入矢量與使用特定算法的MDB數據集之間的相關性。在多核服務器上減少mongodb映射
psudo代碼:
function find_best_correlation(input_vector)
max_correlation = 0
return_vector = []
foreach reference_vector in dataset:
if calculateCorrelation(input_vector,reference_vector) > max_correlation then:
return_vector = reference_vector
return return_vector
這是一個很好的候選人的map-reduce圖案,我不關心的計算是在運行順序
的問題是,我的數據庫在一個節點上。 我想同時運行多個映射(我有一個8核心機器)
從我所瞭解的情況來看,MongoDb每個節點只使用一個執行線程 - 實際上我正在串行運行我的數據集。 這是正確的嗎?
如果是的話,我可以配置每個map-reduce run的進程/線程數量嗎? 如果我管理多個並行運行map-reduce的線程,然後彙總結果,我會大幅提高性能(是否有人試過)? 如果不是 - 我可以在同一個節點上有多個我的數據庫的複製,並且「欺騙」mongoDb可以在兩個複製上運行?
謝謝!
謝謝,但仍不清楚,如果我可以在同一臺機器上多次複製工作再次。 – 2012-08-01 10:00:18
不建議在單個節點上運行多個MongoD實例。這些進程可以爭奪像RAM這樣的資源,這應該避免。避免單線程MR的另一種可能的解決方案可能是MongoDB Hadoop連接器,它將數據存儲與處理分開:http://www.mongodb.org/display/DOCS/Hadoop – Jenna 2012-08-01 17:12:01
但是爲了提供更完整的答案,有一個單個JS引擎每個進程,所以理論上(儘管不推薦),如果有多個MongoD,應該可以在單個節點上運行多個MR作業。更好的解決方案是在不同的分片上並行運行MR作業。 – Jenna 2012-08-01 17:20:20