Я пытаюсь проанализировать файл CSV, полученный с помощью POST, в JSON, а затем загрузить его в мою базу данных MongoDB.Проблема в том, что я обнаружил, что следующий скрипт не так эффективен: он не такой быстрый и использует до 1,3 ГБ памяти, когда я пытаюсь проанализировать 4 CSV по 8,5 МБ каждый (~ 85 000 строк).
У кого-нибудь есть предложения по его улучшению?
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;
}
});
});
});
Заранее спасибо:)