処理するレコードを含むデータベーステーブルがあります。このテーブルには、次のステータス値を表すフラグ列があります。1-処理の準備ができている、2-正常に処理されている、3-処理に失敗している。
.netコード(繰り返しプロセス-コンソール/サービス)は、処理の準備ができているレコードのリストを取得し、それらをループして処理を試み(それほど長くはありません)、成功または失敗に基づいてステータスを更新します。
パフォーマンスを向上させるために、このプロセスでマルチスレッドを有効にします。私は、6つのスレッドを生成することを考えています。各スレッドは、サブセットを取得します。
明らかに、異なるスレッドが同じレコードを処理することは避けたいと思います。スレッドがクラッシュしてレコードがハングした場合に対処するために、データベースに「処理中」フラグを設定したくありません。
これを行う唯一の方法は、使用可能なレコードの完全なリストを取得し、各スレッドにグループ(おそらくID)を割り当てることです。個々のスレッドに障害が発生した場合、その未処理のレコードは、次にプロセスが実行されたときに取得されます。
グループをスレッドに割り当てる前にグループを分割する他の方法はありますか?