使用CouchDB节点JS进行大量parsing

我和我的团队正在使用NodeJS(使用jsdom / jQuery)并parsing存储在CouchDB中的很多HTML文档。 NodeJS是单线程的,所以在一个服务器中有8个内核根本不能帮助我们,这是我想知道如何最好地创buildsubprocess(工作人员?)来处理从CouchDB中取出的单个文件?

这是我的思考过程:

  1. 主要NodeJS脚本循环遍历CouchDB视图,每隔X分钟从文档获取HTML文件
  2. 产生一个进程来parsing(jsdom / jQuery)并存储每个HTML文件的结果

我们并没有运行一个web服务器来处理这个(所有的命令行),所以我不确定如何处理这个通用的“设置CRON只是单独运行每个parsing任务”。 看来,工作人员通常用来处理来自web服务器的请求。

思考?

使用cluster

 var cluster = require("cluster"); var numCPUs = require('os').cpus().length; var htmlDocs = [...]; if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('death', function(worker) { console.log('worker ' + worker.pid + ' died'); }); } else { for (var i = process.env.NODE_WORKER_ID; i < htmlDocs.length; i+=numCPUs) { couch.doWork(htmlDocs[i]); } } 

这是对数组中的成员进行工作的经典案例,然后通过让每个进程执行数组的一个子集来将这个工作分解到多个进程上。

请注意我们如何通过进程数来增加i。 这意味着工人1做第一,第五,第九等,工人2做第二,第六,第十等等。