Я пытаюсь написать небольшое приложение node, которое будет искать и анализировать большое количество файлов в файловой системе. Чтобы ускорить поиск, мы пытаемся использовать какое-то сокращение карты. План был бы следующим упрощенным сценарием:
- Веб-запрос приходит с поисковым запросом
- запускается 3 процесса, каждый из которых получает 1000 (разных) файлов
- Как только процесс завершится, он вернется к основному потоку
- Как только все процессы завершатся, основной поток будет продолжаться, возвращая комбинированный результат как результат JSON
Вопросы, которые у меня есть, следующие: Это можно сделать в Node? Каков рекомендуемый способ сделать это?
Я играл в fiddling, но не последую дальше, следуя примеру Process:
Инициатор:
function Worker() { return child_process.fork("myProcess.js); }
for(var i = 0; i < require('os').cpus().length; i++){
var process = new Worker();
process.send(workItems.slice(i * itemsPerProcess, (i+1) * itemsPerProcess));
}
myProcess.js
process.on('message', function(msg) {
var valuesToReturn = [];
// Do file reading here
//How would I return valuesToReturn?
process.exit(0);
}
Несколько побочных элементов:
- Я знаю, что количество процессов должно зависеть от количества процессоров на сервере.
- Я также знаю ограничения скорости в файловой системе. Рассмотрите это как доказательство концепции, прежде чем переместить это в базу данных или экземпляр Lucene: -)