NODE.JS:致命错误 - JS分配失败 - 在解析大型excel文件时处理内存不足

时间:2014-02-21 06:53:59

标签: excel node.js mongodb

我使用nodejs用模块“jsxlsx_async”解析xlsx文件,值将存储在mongodb中。 我的代码:

    xlsx(file, function(err,wb){
        if (err){
            //handling err
        }
        //get data array 
        wb.getSheetDataByName('Sheet1', function(err,data){
            if (err){
                //handling err
            }
            //handling data
            console.log(data);
        });
    });

使用:Nodejs:v0.10.25,MongoDB:v2.2.6, 操作系统:win8,内存:6GB

我的步骤: 1.read上传的xlsx文件并将这些读取的值保存到JS对象中。 2.通过迭代JS对象上的值,将读取值保存到mongodb集合中。

这适用于较小的xlsx文件,但我想解析大于50MB的xlsx文件。

我的问题是我将整个xlsx值存储在单个JS对象中。 请为解决方案提供一些更好的想法。 是否有更好的方法可以逐行读取xlsx并在读取行时立即保存值?

1 个答案:

答案 0 :(得分:45)

之前我遇到过类似的问题。我需要从txt文件中读取一个巨大的JSON对象,但该进程因为内存不足而被终止。关于这个问题,我的解决方案是将这个巨大的文件分成2个文件。

关于您的问题,我的建议是:

  1. 尝试增加v8引擎的内存限制。 https://github.com/joyent/node/wiki/FAQ示例(8192表示8GB):

    node --max-old-space-size=8192 server.js 
    
  2. 如果#1不起作用,请尝试使用此lib逐行读取xlsx文件:https://github.com/ffalt/xlsx-extract

  3. 如果#1,#2不起作用,请尝试https://github.com/extrabacon/xlrd-parser