他のインスタンスが同じデータを処理しないように、行を「使用中」として識別するために何らかの形式のマーカーが必要であるように聞こえます。ブール型と日付型のどちらを使用するかは関係ありません。どういうわけか、使用中の行にマークを付ける必要があります。
これは、ディスパッチャ、プロセス、またはテーブルへの唯一のアクセス権を持つスレッドを介して行うことができます。行を選択して他のプロセスに渡して作業するのが唯一の仕事です。それでも、コーディネーターはデータをどこまで取得したかを知る必要があるため、同じ問題に戻ることができます。
もう1つの方法は、フィールドを使用して、行が使用中であることを示すことです(質問で述べたように)。各プロセスは、テーブルをロックするためにトランザクション内で実行される一意のIDで行のブロックを更新します。 CONNECTION_ID()
から返された接続番号を使用します それらに印を付けると、それがユニークであることがわかります。
UPDATE ... WHERE connection_id IS NULL
の後 (制限が適用された状態で)トランザクションが完了すると、プロセスはSELECT ... WHERE connection_id = CONNECTION_ID()
を実行できます。 処理する行を取得します。
作業が完了すると、すべてが処理されるまで、サイクル全体が再開され、次の行のセットにマークが付けられます。