我在一个~3-4GB的未压缩csv文件中有很多gb的数据。我创建了一个流函数,它扫描每个csv文件中某个列中的值,如果是,则将其保存到单个输出文件(由每个输入函数共享)。
我看到的是将其设置为流式传输26个文件(一年52周/一季2个),一次大约需要8-9000秒(文件大约346秒)。当我运行单个文件时,我得到< 200秒我在哪里创造70%的开销?
我希望代码无关紧要,但是为了冗长:我正在使用一个名为“byline”的库来传输文件。很确定我的过滤是次优的(特别是后来支持多个过滤器),但我目前只运行1个过滤器,因此应该对性能保持中立。
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;
}