何千行ものログファイルを読み取り、各行を Mongo データベースに書き込む必要があります。ノードストリームを使用してファイルを読み込んでいます。「分割」npmパッケージを使用して、ファイルを「行」に分割しています。MongoDB の書き込みは、ネットワークの考慮事項により、ログファイルの読み取りよりもはるかに時間がかかります。
私のコアコードは次のようになります。
var readableStream = fs.createReadStream(filename);
readableStream
.pipe(split()) // This splits the data into 'lines'
.on('data', function (chunk) {
chunkCount++;
slowAsyncFunctionToWriteLogEntryToDatabase(chunk); // This will take ages
})
.on('end', function () {
// resolve the promise which bounds this process
defer.resolve({v:3,chunkCount: chunkCount})
});
キューに入れられる書き込みの数によって MongoDB システムが打撃を受けることを心配する必要はありますか? おそらく、ノード パイプ バックプレッシャー メカニズムは、多くの db 書き込みがキューに入れられていることを認識していないのでしょうか? ログファイルから次の行を読み取る前に、各 MongoDB 挿入が完了するのを待つように、読み取り可能なストリームを「遅く」する方法はありますか? 私は不必要に心配していますか?