【发布时间】:2016-04-29 15:40:40
【问题描述】:
我有一个可能包含多达 1M 条记录的输入文件,每条记录看起来像这样
field 1 field 2 field3 \n
我想读取这个输入文件并根据field3 对其进行排序,然后再将其写入另一个文件。
这是我目前所拥有的
var fs = require('fs'),
readline = require('readline'),
stream = require('stream');
var start = Date.now();
var outstream = new stream;
outstream.readable = true;
outstream.writable = true;
var rl = readline.createInterface({
input: fs.createReadStream('cross.txt'),
output: outstream,
terminal: false
});
rl.on('line', function(line) {
//var tmp = line.split("\t").reverse().join('\t') + '\n';
//fs.appendFileSync("op_rev.txt", tmp );
// this logic to reverse and then sort is too slow
});
rl.on('close', function() {
var closetime = Date.now();
console.log('Read entirefile. ', (closetime - start)/1000, ' secs');
});
我基本上被困在这一点上,我所拥有的只是从一个文件读取并写入另一个文件的能力,有没有办法在写入之前有效地对这些数据进行排序
【问题讨论】:
-
我猜你已经排除了将所有数据加载到内存中进行内存排序的可能性,对吗?
-
我刚刚做了一个快速测试,让 javascript 对 1M 反向排序的数字执行 array.sort 需要 6.4 秒。测试在我蹩脚的笔记本电脑上运行。
-
您可以编写/使用原生扩展,例如 ivanvergiliev.github.io/node-cpp
标签: javascript node.js file sorting bigdata