node.js:async.each速度太慢,需要大量元素asynchronous处理

我有一个4GB的RAM系统。 我需要按以下方式处理一组200个文件(平均文件大小= 20MB):

  • 从gridfs读取每个文件
  • 从文件中提取一些信息
  • 将信息存储到mongoDB中的某个集合中

现在的代码,做同样的事情是:

async.each(files, function (file, callback){ console.log("reading file", file._id); readstream[file._id] = db.gfs().createReadStream({ _id: file._id }); readstream[file._id].on('data', function (chunk) { part[file._id] = part[file._id] && (part[file._id] + chunk.toString()) || chunk.toString(); }); readstream[file._id].on('end', function(){ // do something here }); }, function (err){ if(err){ console.error("error ", err); res.json(err); } else{ console.log("saved all files ############ YIPPIEEEEEEEEEEEEE ###################"); res.json({"status": 1}); } }); 

它的作品像10个文件的魅力。 当文件数量很大(在我的情况下是200)时,文件数量变得非常慢,可能是由于内存限制。

现在,我可以一次处理文件10,并且一次性处理文件10。 但是我想知道解决生产中的这种情况的标准做法是什么?

由于async.each并行地执行所有任务,所以问题可以async.each为并行执行,作为解决方法,您可以使用async.eachSeries来逐个执行任务,也可以考虑使用async.cargo来结合执行多个拍摄任务。