2011-12-23 8 views
0

JDBCバッチジョブがあります。二つのテーブルがあります。JDBCバッチジョブでマルチスレッドを使用する

  • BUSINESS_CONTRACT
  • CLASSIFY_RECORD

事業契約のテーブルBUSINESS_CONTRACT情報を格納し、我々は、テーブルCLASSIFY_RECORDで結果を分類毎月、店舗事業契約を分類します。

バッチジョブは月に1回実行され、BUSINESS_CONTRACTに対してビジネス契約を分類する必要があるかどうかを問い合わせ、分類して分類結果をCLASSIFY_RECORDに挿入します。

バッチジョブは今、シングルスレッドで実行され、私はそれが私がディスパッチャー・ワーカーパターンを使用して、基本的なコード構造を記述する必要がありますどのようにマルチスレッド

で走るようにしたいですか?

私は、Javaマルチスレッドを学ぶが、私は本当の問題を解決するためにマルチスレッドを使用したいmostly.Now理論上のリソースを見つけましたが、最初の行のコードを書く方法を知りません。

答えて

2

まず、マルチスレッドの複雑さが増していく必要がありますか?現在のプロセスの実行にはどれくらいの時間がかかりますか?これを実行しているサーバーで複数のCPUまたは複数のCPUコアを使用できますか?それはマルチスレッド化にとって有益でしょうか?

私は

がどのように手動でこの作業を行うだろう...あなたのためにあなたのコードを記述するつもりはないんだけど、あなたにいくつかのポインタを与えることができますか?あなたは紙の記録としてこれを持っていて、仕事を同僚と分けなければならないと仮定します。どのように仕事を分割しますか? 2人から20人の間?

これらの詳細がわかったら、親の "ディスパッチャ"コードを使用して複数のスレッドを作成して、それぞれのスレッドの一部だけを選択するように設定できますあなたの質問からの結果それぞれのスレッドへの参照を保持し、バッチ全体が完了するのを待つためにスレッドがすべて開始されたら、それぞれのスレッドに対して.join()を呼び出す必要があります。同じ作業単位に分割するのが困難な大量のデータがある場合(1,000レコードを500と500に分けた場合、何らかの理由でリソースの75%と25%が必要になる場合があります)、作業を分割することを検討することができますはるかに小さい単位(スレッドよりも多くの単位)に分割し、ディスパッチャにすべての作業が割り当てられるまで作業単位を作業者に送り続けるようにします。

また、これらの分割機能が本当に異なると考えていますか?何らかの理由で1つの作業単位が失敗し、データベースにロールバックする必要がある場合、これは他の作業単位のすべてを停止し、既存の挿入物もロールバックする必要があることを意味しますか?

+0

私はこれをやりたいのは、学習目的のためだけです。それらの概念を実際の問題で理解する。 – CaiNiaoCoder

+0

現在、私のラップトップでは30分かかり、バッチジョブは8CPUのサーバーに展開されます。 – CaiNiaoCoder

0

バッチ更新を使用していますか?おそらく、単一の更新を行う複数のスレッドと比べて、より大きな違いがあります。

関連する問題