0

関心のある特定の基準に一致する100,000を超えるレコードを含むテーブルがあります。ジョブは、このセットから一度に1000レコードを取得するために実行され、各レコードに対して何らかの操作を実行します。このテーブルのレコードを変更する可能性のある他のプロセスがあり、対象のセットに影響を与える可能性があります。これらの変更により、ジョブの開始時にページにあるはずのレコードが変更され続けます。これは、特定のレコードを見逃したり、特定のレコードを複数回処理したりすることにつながります。

このような状況を回避するようにシステムを設計する必要があることは理解していますが、現時点ではシステムを再設計することはできません。それで、これが一般的なシナリオであるかどうか疑問に思いました。もしそうなら、どのようなソリューションパターンが存在しますか?グーグルを試しましたが、意味のあるヒットが得られませんでした。

ありがとう。

4

2 に答える 2

1

1つのアプローチは、データベースがアイドル状態のときにクローンを作成してから、ジョブ内のコピーで作業することです。データは少し古くなっていますが、コンテンツ全体にアクセスしようとしているときにデータベースが絶えず更新されている場合、「最新」にすることはできません。

于 2012-04-05T02:12:24.960 に答える
1

1000レコードを取得して計算を実行することは時間のかかるプロセスではないと仮定すると、コードをトランザクションにラップすることができます。もちろん、これは、他の接続が対象のテーブルを同時に変更できないことを意味します。基本的に、更新/挿入ステートメントが実行される前に、トランザクションが完了するまで待機する必要があります。したがって、コードにそれほど時間がかからず、他の接続のタイムアウトが妥当である場合、これは可能な解決策です。

于 2012-04-05T02:22:53.077 に答える