を使用して、多数のテキストファイルを1行ずつ処理していますBufferReader.readlLine()
。
同じサイズの2つのファイルは130MBですが、1つは処理に40秒かかり、もう1つは75秒かかります。
1つのファイルに180万行あり、他のファイルには210万行あることに気付きました。しかし、同じサイズの300万行のファイルを処理しようとすると、処理に30分かかりました。
だから私の質問は:
これは、バッファリーダーのシーク時間によるものですか(ファイルがどのように
BufferedReader
機能するか、またはファイルを1行ずつ解析するかを知りたいですか?)ファイルを1行ずつより速く読み取る方法はありますか?
友よ、私はもう少し詳細を提供しています。
正規表現を使用して行を3つの部分に分割し、次にSimpleUnsortedWriter
(Cassandraが提供)を使用して、キー、列、および値としてファイルに書き込みます。16MBのデータが処理された後、ディスクにフラッシュされます。
ただし、処理ロジックはすべてのファイルで同じです。サイズが330MBのファイルが1つでも、30秒で処理される行数は約100万行になります。理由は何でしょうか?
deviceWriter = new SSTableSimpleUnsortedWriter(
directory,
keyspace,
"Devices",
UTF8Type.instance,
null,
16);
Pattern pattern = Pattern.compile("[\\[,\\]]");
while ((line = br.readLine()) != null)
{
//split the line i n row column and value
long timestamp = System.currentTimeMillis() * 1000;
deviceWriter .newRow(bytes(rowKey));
deviceWriter .addColumn(bytes(colmName), bytes(value), timestamp);
}
変更されまし-Xmx256M to -Xmx 1024M
たが、とにかく役に立ちません。
更新: 私の観察によると、(物理メモリ内の)バッファに書き込んでいるので、いいえ。バッファへの書き込みの数が増えているため、新しい書き込みには時間がかかります。(これは私の推測です)
返信してください。