一个数组可以处理多少个项目 node.js

Posted

技术标签:

【中文标题】一个数组可以处理多少个项目 node.js【英文标题】:how many items can a array handle node.js 【发布时间】:2019-02-10 14:20:43 【问题描述】:

我正在尝试根据大约 500.000 行或更多行的 txt 文件将对象放入数组

我正在使用 require('readline') 来处理它,但是当达到第 470000 行(例如)没有错误、警告、通知时,处理会为自己“暂停”......

这是我的代码示例(原始代码填充 dataRow 对象,然后在达到第 411000 行时“暂停”):

let myList = [];
let lineReader = require('readline').createInterface(
    input: require('fs').createReadStream(filePath).pipe(iconv.decodeStream('latin1'))
);
lineReader.on('line', function (line)                

    // here there are a lot more fields, but I have to cut off for this example
    let dataRow = JSON.parse('"Agencia_Cobranca":"","Aliquota_ICMS":""');

    myList.push(dataRow);

    //this if is only to follow what is happen
    if( myList.length %10000 == 0 || myList.length>420000) 
        console.log(" myList executed: ",myList.length, ' - ', JSON.stringify( myList[myList.length-1] ).length, ' - ' ,new Date() );
    

).on('close',function()   
    console.log('finished');
    process.exit(0);    
);

我正在使用这个命令行来执行

node --max-old-space-size=8192 teste

嗯...这就是结果,当达到这一行时屏幕就一直保持这种状态...永远不会结束并且没有错误:(

【问题讨论】:

什么操作系统? node.js 的哪个版本?什么配置? 你能节省多少内存? v8.9.1,我的笔记本6G内存 看不到与行数有错误关系,我已经读过超过100万行的文件,测试另一个模块,使用fs.readfile 我没有读取行的问题,问题是将此内容存储在对象数组中 【参考方案1】:

您的堆栈/内存可能已满,并且以一种奇怪的方式出错。如果可能的话,我会建议你的程序更有效地使用内存,在你阅读它时做所有你需要做的事情,然后丢弃它。将其全部存储在内存中永远不会成为解决方案。

【讨论】:

我现在做了一个类似的代码,但是在 php 中,它可以工作,但在 nodejs 中它似乎比 php 更快(考虑到 nodejs 的“暂停”时刻)不幸的是【参考方案2】:

如果您处理大量数据,请考虑使用数据库。将其存储在表中,然后查询您需要使用的数据会更高效。

【讨论】:

【参考方案3】:

在 NodeJs(javascript 也是)中,数组对象的最大大小为 2^32 -1。只需尝试在 nodejs 应用程序中执行此操作

console.log(new Array(4294967295))

try 
    console.log(new Array(4294967296))
 catch(err)
    console.log(err);

【讨论】:

以上是关于一个数组可以处理多少个项目 node.js的主要内容,如果未能解决你的问题,请参考以下文章

Node.js概述及编程基础

Node.js 简介

idea搭建vue项目

Idea搭建VUE项目

Node.js node_modules 相互干扰

在数组中的每个项目之前有多少个连续元素较小