1
http投稿から大きなファイルを受信しています。私はこのファイルから各行を取り出し、それをデータベースに挿入する必要があります。それはそう、これは私が持っているものです時に500かそこらの行を挿入することにより、これを行うにははるかに高速です:ノードストリームby line closeイベント
var readline = require('readline');
var insertSize = 500;
var records = [];
var reader = readline.createInterface({
input: inputStream
});
reader.on('line', function(line) {
reader.pause();
var entry = line.split('\t');
if (entry.length != 3) return reader.resume();
records.push({
first: entry[0],
second: entry[1],
third: entry[2]
});
if (records.length < insertSize) return reader.resume();
database.create(records).exec(function (err) {
if (err) return res.serverError(err);
records.length = 0;
reader.resume();
});
});
reader.on('error', function(err) {
return res.serverError(err);
});
reader.on('close', function() {
database.create(records).exec(function (err) {
if (err) return res.serverError(err);
return res.ok();
});
});
文書によると、line
とclose
イベントはまだpause()
後にトリガすることができます。これは、line
イベントでdatabase.create()
が終了する前に、close
イベントがトリガーされるため発生しています。これを処理するより良い方法はありますか? line-by-line
は良いでしょうが、ストリームを入力として受け取ることはできません。ありがとう。