我有一个特定格式的10 GB日志文件,我想逐行处理这个文件,然后在应用一些转换后将输出写入其他文件。我正在使用node进行此操作。
虽然这种方法可以,但是它需要很长时间才能完成。我能够在JAVA中在30-45分钟内完成此操作,但在node中,完成相同的工作需要超过160分钟。以下是代码:
以下是读取输入中每一行的初始化代码。
这是一种执行某些操作并将输入传递给write方法写入输出文件的方法。
以下方法用于将数据写入新文件。
虽然这种方法可以,但是它需要很长时间才能完成。我能够在JAVA中在30-45分钟内完成此操作,但在node中,完成相同的工作需要超过160分钟。以下是代码:
以下是读取输入中每一行的初始化代码。
var path = '../10GB_input_file.txt';
var output_file = '../output.txt';
function fileopsmain(){
fs.exists(output_file, function(exists){
if(exists) {
fs.unlink(output_file, function (err) {
if (err) throw err;
console.log('successfully deleted ' + output_file);
});
}
});
new lazy(fs.createReadStream(path, {bufferSize: 128 * 4096}))
.lines
.forEach(function(line){
var line_arr = line.toString().split(';');
perform_line_ops(line_arr, line_arr[6], line_arr[7], line_arr[10]);
}
);
}
这是一种执行某些操作并将输入传递给write方法写入输出文件的方法。
function perform_line_ops(line_arr, range_start, range_end, daynums){
var _new_lines = '';
for(var i=0; i<days; i++){
//perform some operation to modify line pass it to print
}
write_line_ops(_new_lines);
}
以下方法用于将数据写入新文件。
function write_line_ops(line) {
if(line != null && line != ''){
fs.appendFileSync(output_file, line);
}
}
我希望将这个时间缩短到15-20分钟。是否有可能做到呢?
还有,为了记录,我正在尝试在一台配备i7处理器和8 GB内存的英特尔电脑上运行。