使用sequelize和csv-parse

时间:2017-03-29 17:06:35

标签: node.js csv sequelize.js heap-memory

我想这是一个太具体的问题,但我真的很困惑。

我有一个大的csv文件(2.7 GB),其中包含大约6百万的产品信息。我试图解析数据并将其插入Postresql。我正在使用Sequelize for ORM和csv-parse模块来解析文件。

当我尝试运行我的代码时出现JavaScript heap out of memory错误。我正在使用流来读取和解析csv文件,所以我不明白为什么它会占用太多内存?我的代码段是否存在导致此错误的问题?或者任何更好的方式来实现我想要做的事情?任何帮助将不胜感激。

const csvParser = require('csv-parse'); // https://github.com/wdavidw/node-csv-parse

const Product = require('../models').Product;

const options = {
    delimiter: '|',
    trim: true,
    relax: true
}

const parser = csvParser(options);

fs.createReadStream('path/to/csv', {encoding: 'utf8'})
    .pipe(parser)
    .on('data', row => {
        processPlainRow(row);
    })
    .on('end', () => {
        console.log('ended');
    })
    .on('error', error => {
        console.log('error: ', error);
    })
    .on('close', error => {
        console.log('stream closed');
    })

function processPlainRow(row) {
    let productToInsert = parsedRow(row);
    Product
        .create(row)
        .then(product => {
            // do nothing at all
        })
        .catch(error => {
            console.log(error);
        });
}

function parsedRow(row) {
    return {
        name: row['name'],
        price: row['price'],
        // ... goes on
    };
}

0 个答案:

没有答案