я имею типичный код для запуска WebWorker в узле:Быстро растет память при запуске WebWorker в Node.js с «большими» данными
var Threads = require('webworker-threads');
var worker = new Threads.Worker(__dirname + '/workers/myworker.js');
worker.onmessage = function (event) {
// 1.
// ... create and execute cypher query ...
};
// Start the worker.
worker.postMessage({
'data' : data
});
В 1. Я посылаю небольшие кусочки обработанных данных в Neo4j дб. Для небольших data
это работает отлично, но когда данные получают чуть больший узел/рабочий начинает бороться.
Фактический data
Я хочу обработать csv, который я проанализировал с помощью BabyParse, в результате чего объект с 149000 свойствами, где у каждого есть еще 17 свойств. (149000 строк по 17 столбцов = 2533000 свойств). Файл - 17 МБ.
При выполнении этого узла выделяется много памяти и, в конечном счете, падает примерно на 53% распределения памяти. Машина имеет 4 ГБ.
Работник выглядит примерно так:
self.onmessage = function (event) {
process(event.data.data);
};
function process(data) {
for (var i = 0; i < data.length; i++) {
self.postMessage({
'properties' : data[i]
});
}
}
Я попытался кусок данных и обрабатывать его chunkwise в работнике, который также работает нормально. Но я хочу сгенерировать график и обработать ребра, которые мне нужны полные данные, потому что мне нужно проверить каждую строку (вершину) на все остальные.
Есть ли способ передать данные работнику? Или у кого-нибудь есть идея, почему узел выделяет столько памяти с 17 МБ отправляемых данных?
Спасибо, я не знал, что файловая система доступна в веб-работниках. – Wipster