最好/更好的方式来处理(过滤)BIG CSV文件?

我有很多GB的价值每个在〜3-4GB的未压缩CSV文件的数据。 我创build了一个stream函数,它扫描每个csv文件中某个列的值,如果是真的,则将其保存到单个输出文件(由每个input函数共享)。

我所看到的是,将它设置为通过26个文件(一年52个星期/一个季节2个)一次大约需要8-9000秒(约346秒一个文件)。 而当我运行一个单一的文件,我得到<200秒。 我在哪里创造70%的开销?

我的代码希望是不相关的,但是对于冗长:我正在使用名为“byline”的库来stream式传输文件。 很确定我的过滤是不理想的(特别是后来支持多个filter),但我目前只运行1个filter,应该是性能中立。

var fs = require('fs'); var byline = require('byline'); function readSkuData(afilename,col,value) { var stream = fs.createReadStream(afilename); stream = byline.createStream(stream); filters.push([col,value]); stream.on('data',function(line) { loaded = loaded + line.length; lineinfo = line.toString().split(","); if (!(lineFiltered(lineinfo,filters))) { filteredsize = filteredsize + 1; fs.appendFile('filteredData.csv',"\n" + line, function (err) { if (err) throw err;}); } }); stream.on('end',finishProcess); } function lineFiltered(line,filters) { for (i=0;i < filters.length;i++) { if (line[filters[i][0]] != filters[i][1]) { return true; } } return false; }