現在、〜200万レコードのcsvファイルを解析するパーサーのセットアップがあります。次に、いくつかのフィルタリング アルゴリズムを適用して、含めたい/除外したいレコードを除外します。最後に、すべてを新しい csv ファイルに書き戻します。
いくつかのベンチマークを行ったところ、csv へのデータの書き込みは非常にコストがかかり、フィルター処理とファイルへの追加を同時に行うと、大幅な速度低下が発生することがわかりました。すべてのフィルタリングを実行して、書き込まれる行をキューに配置し、そのキューがいっぱいになるか、すべてのフィルタリングが完了したときに、2 番目のプロセスがすべての書き込みを独自に実行できるかどうか疑問に思っていました。
基本的に要約すると:
Read line
Decide whether to discard or keep
if I'm keeping the file, add it to the "Write Queue"
Check if the write queue is full, if so, start the new process that will begin writing
Continue filtering until completed
ご助力いただきありがとうございます!
編集: 私が書いている方法は次のとおりです:
FileWriter fw = new FileWriter("myFile.csv");
BufferedWriter bw = new BufferedWriter(fw);
while(read file...) {
//perform filters etc...
try {
bw.write(data.trim());
bw.newLine();
}catch(IOException e) {
System.out.println(e.getMessage());
}