0

マルチスレッドを使用して、バルクデータファイルを読み取り、データを処理する必要があります (データの検証、検証の失敗の追跡、データベースへの挿入など)。メインスレッドを使用してファイルからデータを読み取り、ExecutorService.

  1. これは正しいアプローチですか?はいの場合、どうすればこれを行うことができますか?

  2. また、データベースに対して検証と挿入が行われると、すべてのレコード出力を処理する必要があります。すべてのレコードの出力を追跡するにはどうすればよいですか? それを 1 つの共通変数にして、故障記録データの数を増やすことはできますか?

  3. また、連続して失敗したレコードの数を追跡する必要がありますか?

ありがとう。

4

3 に答える 3

2

ファイルを仮想セグメントに分割し、実行者がこれらのセグメントを選択して処理できるようにすることをお勧めします。メインスレッドでファイルを読み取ると、ボトルネックが発生します。各スレッドがそのセグメントを個別かつ並列に読み取れるようにします。次の投稿を参照してくださいJavaでメモリにマップされたファイルへの同時読み取りを実装する方法は?

于 2012-05-25T09:31:39.290 に答える
0

はい、正しいですが、処理にかなりの時間がかかり (ファイルの読み取りと比較して)、部分の処理が独立しており、複数のコアがある場合は改善されます。データを任意のコンテナーに読み取り (RAM に収まる場合)、次のような ExecService チュートリアルを使用します: http://tutorials.jenkov.com/java-util-concurrent/executorservice.html

于 2012-05-25T09:23:32.930 に答える
0

あなたの考えは正しいIMOです。私は次のようなことをします:

while ((line = filereader.readLine()) != null) {
    Mycallable mycallable = new Mycallable(line);
    executor.submit(mycallable);
            }
于 2012-05-25T09:24:01.623 に答える