0

DBからフェッチしてシンプルなコンソールベースのJavaアプリで毎日処理する20000を超えるアイテムの大きなリストがあります。

それを行うための最良の方法は何ですか。リストを小さなセットでフェッチして処理する必要がありますか、それとも完全なリストを配列にフェッチして処理する必要があります。アレイに保持することは、膨大なメモリ要件を意味します。

注:処理する列は1つだけです。

処理とは、列内のその文字列をSOAPリクエストとして別の場所に渡す必要があることを意味します。20000アイテムは長さ15の文字列です。

4

3 に答える 3

1

場合によります。20000は実際には大きな数ではありません。20000の短い文字列または数値のみを処理している場合、メモリ要件はそれほど大きくありません。しかし、それが20000の画像の場合、少し大きくなります。

常にトレードオフがあります。データの複数のチャンクは、データベースへの複数のトリップを意味します。しかし、1回の旅行はより多くのメモリを意味します。あなたにとってどちらがより重要ですか?また、データをチャンク化できますか?または、たとえばレコード1でレコード1000を処理できるようにする必要がありますか。

これらはすべて考慮すべきことです。うまくいけば、彼らはあなたがあなたに最適なデザインを見つけるのを手伝ってくれるでしょう。

于 2012-06-19T04:23:53.773 に答える
0

訂正してください私が間違っている場合は、少しずつフェッチし、ロールバック操作も提供してください。

于 2012-06-19T04:23:47.520 に答える
0

SQLスクリプトを使用してデータベースレベルでジョブを実行できる場合、これが不可能な場合は、ID列と処理する必要のある列のような2つの列を持つデータの小さな部分をロードすることをお勧めします。

これにより、プロセス中のパフォーマンスが向上し、クラッシュが発生した場合でも、処理されたすべてのデータが失われることはありませんが、クラッシュの場合は、処理されたデータセットと処理されていないデータセットを知る必要があります。これは、3番目の列を使用して行うことができます。または、各ラウンドで最後に処理されたIDを保存します。

于 2012-06-19T04:27:41.587 に答える