我正在尝试将通过POST获得的CSV文件解析为JSON,然后将其上传到我的MongoDB数据库。 问题是我发现下一个脚本不是那么表现:它不是那么快,当我试图解析每个8.5MB(4~85'000行)的4个CSV时,它使用高达1.3GB的内存。
有人提出一些改进建议吗?
router.route('/upload').post(upload.single('data'), function (req, res) {
fs.rename(UPLOAD_PATH+req.file.filename, UPLOAD_PATH+req.file.originalname, function(err){
if (err) return res.status(500).send("Problem in POST\n");
res.status(200).send("File registered\n");
var arr = []; // TODO should fix: too much memory?
csv().fromFile(UPLOAD_PATH+req.file.originalname)
.on('json', (jsonObj)=>{
arr.push(jsonObj);
})
.on('done', (error)=>{
console.log('End of parsing, length: '+arr.length)
Ping.insertMany(arr)
.then(function(docs) {
console.log('Inserted everything on DB')
arr.length = 0;
})
.catch(function(err) {
// TODO
});
});
});
});
EDIT1:使用mongoimport解析
router.route('/upload').post(upload.single('data'), function (req, res) {
fs.rename(UPLOAD_PATH+req.file.filename, UPLOAD_PATH+req.file.originalname, function(err){
if (err) return res.status(500).send("Problem in POST\n");
res.status(200).send("File registered\n");
const { exec } = require('child_process'); // TODO secrets?
exec('mongoimport -h host -d db -c pings -u user -p passwd --file '+UPLOAD_PATH+req.file.originalname+' --type csv --headerline', (err, stdout, stderr) => {
if (err) {
// TODO
console.log('Error')
return;
}
});
});
});
提前致谢:)