我有一台配备4GB内存的系统。我需要按照以下方式处理一组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个文件,并且可以接受,因为这是一次性活动。但我想知道在生产环境中解决这种情况的标准做法是什么?