2013-05-29 18 views

回答

2

MapReduce在MongoDB實例中運行。

您現在無法使用任何其他編程語言或平臺來創建MapReduce。你可以模擬我想的概念,但它意味着所有的數據都被傳輸到你的應用程序等。

函數的主體通過調用從Node.JS進程轉移到MongoDB(和分片等) toString在提供的map功能(見here)。

if ('function' === typeof map) { 
    map = map.toString(); 
} 

你可以在map功能嵌入功能,但你要確認的性能滿足您的需求的功能複雜度的增加。但是,它仍然僅限於您傳遞的函數,並且無法訪問可能正在執行的Node.JS中的其他腳本。

編輯:

此外,您還可以使用mapReduce調用的參數scope附加額外的功能。例如,如果你通過了scope爲:

{ add10: function(v) { return v + 10; } } 

的函數調用add10將在map調用可用的(以及reducefinalize功能):

var fancyMath = add10(this.total); 

因此,使用該技術,你可以通過一些有限的功能。它確實被序列化爲BSON併發送到MongoDB服務器,因此它需要是獨立的(並且不引用其他本地不可用的JavaScript函數)。

+0

很好,謝謝。用'scope'參數傳遞一個Node模塊怎麼樣? – gremo

+1

@Gremo將無法工作,該模塊將被序列化爲BSON,並且不會在另一端反序列化 – Sammaye

+0

@Gremo - 你想做什麼?無論如何,你一次只能訪問一個文檔......(我擔心你試圖在MapReduce中做太多)。 – WiredPrairie