1

かなり単純な Springbatch タスクレットをスケールアップしようとしています。状況は次のとおりです。

  • HibernatePagingItemReader
  • カスタム プロセッサ: HibernatePagingItemReader からのデータに基づいて Web サービス クエリを実行します。
  • カスタムライター

Web サービスのクエリは遅く、簡単に並列化できるため、ボトルネックは私のプロセッサです。

タスクレットにタスク エグゼキュータ (org.springframework.scheduling.concurrent.ThreadPoolTask​​Executor) を追加しましたが、直線的にスケーリングしません。5 スレッドを超えると、合計実行時間は同じになります。

Spring docs によると、リーダーはすぐに使用できるスケーラブルではありませんが、私のニーズははるかに単純です。リーダーによってフェッチされたすべてのレコードは独立しているため、リーダーを並行して実行できます。

私の質問は次のとおりです。

  • リーダーはマルチスレッド コンテキストでどのように実行されますか? それらは並列化されていますか、それとも並列化されたリーダーにデータを配布していますか?
  • リーダーが並列化されている場合、これらのレコードをプロセッサに配布するには、レコードの量を減らす (maxItemCount を設定する) 必要があると思います

それをスケールアップするための他のアイデアはありますか?

4

1 に答える 1

0

通常、どの種類のバッチ ライブラリでも、並列処理に使用されるスレッド プールの上限が定義されています。あなたの説明からすると、上限に達したようです。増やしてみてください。

于 2012-10-04T11:56:29.843 に答える