我在使用npm库'csv-parser'和promises逐行解析800k行CSV文件时遇到麻烦。
这就是我正在做的事情,只是暂停每一行并在用户在数据库中被提升后恢复。
在〜= 3000个用户处,使用了超过1GB的RAM,并且出现了内存堆使用异常。
const csv = require('csv-parser');
const fs = require('fs');
const path = require('path');
function parseData() {
return new Promise((resolve, reject) => {
const stream = fs.createReadStream(filePath)
.pipe(csv(options))
.on('data', row => {
stream.pause();
upsertUser(row)
.then(user => {
stream.resume();
})
.catch(err => {
console.log(err);
stream.resume();
});
})
.on('error', () => reject())
.on('end', () => resolve());
return stream;
});
upsert函数:
function upsertUser(row) {
return user.find({
where: {
mail: row.emailAddress
}
});
编辑:这是节点检查器的图片: