node.js - Node JS 与 CouchDB 进行大量解析

标签 node.js couchdb

我和我的团队正在使用 NodeJS(使用 jsdom/jQuery)并解析存储在 CouchDB 中的大量 HTML 文档。 NodeJS 是单线程的,因此在一个服务中拥有 8 个核心最初对我们没有任何帮助,这就是我想知道如何最好地创建子进程(也许是工作进程?)来处理从 CouchDB 中提取的单个文件的地方?

这是我的思考过程:

  1. 主 NodeJS 脚本循环通过 CouchDB View ,每 X 分钟从文档获取 HTML 文件
  2. 生成一个进程来解析(jsdom/jQuery)并存储每个 HTML 文件的结果

我们根本没有运行网络服务器来处理这些(所有命令行),所以我不确定如何在通用的“设置 CRON 来单独运行每个解析作业”之外处理这个问题。看来工作人员通常用于处理来自网络服务器的请求。

想法?

最佳答案

使用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 执行第 1、第 5、第 9 等操作,工作人员 2 执行第 2、第 6、第 10 等操作。

关于node.js - Node JS 与 CouchDB 进行大量解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9398766/

相关文章:

python - 为 CouchDB 设置 Python ViewServer

Node.js 和 Express 模板似乎无需指定路径即可工作,如何

javascript - gulp watch 不看

node.js - 从父 Node 进程(PM2、NodeJS)运行更新脚本

node.js - 尚未声明 `distinct` 的值

ubuntu - CouchDB 无法启动,没有具体错误

couchdb - 在 View 中添加 CouchDB 文档的上次访问时间

couchdb - 从 CouchDB 获取当前用户信息?

mysql - NodeJS+MySQL 而不是 PHP+MySQL。可以吗?

ruby - CouchDB + Ruby 中的独立附件