(議論のために) 1000 個のレコードと 10 個の Heroku ワーカーを実行しています。各ワーカーが異なる一連のレコードで作業できるようにしたい..
私が今持っているものはかなり良いですが、完全ではありません。
sql = 'update products set status = 2 where id in
(select id from products where status = 1 limit (100) ) return *'
records = connection.execute(sql)
これはかなりうまく機能します。100 レコードを取得すると同時に、他のワーカーが同じ 100 を取得しないようにします。while ループでスローすると、20000 レコードと 2 ワーカーがあっても、最終的にはすべて処理されます。
私の問題は、クラッシュまたは例外が発生した場合、100 レコードが別のワーカーによって処理されているように見えますが、そうではありません。
他の選択が同じレコードを取得するため、トランザクションを使用できません。
私の質問 多くのワーカーが同じデータセットで異なるレコードに取り組んでいるために、他の人がどのような戦略を使用していますか。
私はこれが会話の質問であることを知っています... 私はそれをコミュニティ wiki として置きますが、その能力はもうありません。