У меня есть файл журнала 10 ГБ в определенном формате, я хочу обработать этот файл построчно, а затем записать вывод в другой файл после применения некоторых преобразований. Я использую узел для этой операции.
Хотя этот метод хорош, но для этого требуется чертовски много времени. Я смог сделать это в течение 30-45 минут в JAVA, но в узле на выполнение той же работы уходит более 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]);
}
);
}
Это метод, который выполняет некоторую операцию над этой строкой и передает входные данные методу записи, чтобы записать их в выходной файл.
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 минут. Возможно ли это сделать.
Также для протокола я пробую это на процессоре Intel i7 с 8 ГБ оперативной памяти.
lazy
весь файл в память перед его обработкой, а не передает его построчно? Вам может быть интересен модуль node-byline. - person jfriend00   schedule 17.07.2015lazy
в уравнение, чтобы вы знали, какая подсистема вызывает у вас проблему. - person jfriend00   schedule 17.07.2015lazy
и обработку строк). Запустите простое тестовое приложение для вашего большого файла, чтобы просто прочитать его по частям, используя потоки. Кажется, я уже описывал это несколько раз. Вы должны сделать несколько тестов, чтобы увидеть, что будет работать для вас. - person jfriend00   schedule 17.07.2015