2016-05-06 46 views
1

我有典型的代碼的node.js開始webworker何時開始在節點webworker快速上升內存D b。 對於小型的data這個工作非常好,但是當數據稍微變大時,工人開始掙扎。與「大」數據

實際的data我想處理的是一個csv,我用BabyParse解析得到一個具有149000個屬性的對象,其中每個屬性都有另外17個屬性。 (149000行×17列= 2533000個屬性)。該文件是17MB。

當做這個節點將分配大量的內存,並最終崩潰大約53%的內存分配。機器有4GB。

工人看起來大致是這樣的:

self.onmessage = function (event) { 
    process(event.data.data); 
}; 

function process(data) { 
    for (var i = 0; i < data.length; i++) { 
     self.postMessage({ 
      'properties' : data[i] 
     }); 
    } 
} 

我試圖大塊它逐塊也工作好工人中的數據和過程。但是我想生成一個圖並處理需要完整數據的邊,因爲我需要檢查每一行(頂點)與其他所有數據。

有沒有辦法將數據流到工作人員?或者有沒有人有一個想法,爲什麼節點分配這麼多的內存與17MB的數據被髮送?

回答

1

除了解析主線程中的數據外,您還可以將文件名作爲消息傳遞給worker並讓worker從磁盤加載。否則,你將在內存中存儲所有數據兩次,一次在主機中,一次在工作中。

另一種選擇是將csv npm包與流解析器一起使用。 postMessage他們進來並緩衝起來,直到工人的最終結果。

爲什麼你的解決方案試圖分配我不知道的大量內存。我知道postMessage是爲了傳遞小信息。

+0

謝謝,我不知道文件系統在網絡工作者中可用。 – Wipster