1

特定の時間に終了する(期限が来る)オークションアイテムのリストがSQLデータベースにあり、(Delayed :: Job.enqueue)を使用して、特定のオークションが終了したときにメソッドをトリガーするための適切なアプローチを探しています。

1)オークション開始時にメモリにロードされるすべてのオークションにワーカーを使用します

2)Webアプリの起動時にロードされる1つのワーカーを使用して、定期的にデータベースにクエリを実行し、オークションが終了したかどうかを確認します。

上記の2つよりも優れたアプローチはありますか?

4

1 に答える 1

2

各アイテムを使用run_atして個別にキューに入れ、データベースに追加されたときに終了時にウェイクアップすることができます。そうすれば、必要な作業者は1人だけで、何かが終了するまで作業を行うことはできません。(または、より正確には、N個のワーカーが必要です。ここで、Nは、予想される、または処理する同時クロージングの数です。)

auction.delay(:run_at => auction.ending_at).post_end_work

データベースに追加されたときにオークションをキューに入れることができない場合(たとえば、アクセス権を持たないものによってオークションが追加された場合)、データベースをスイープして最後の値内の値DelayedJobを取得する単一のワーカーを使用する必要があります。ending_atX時間。ここで、Xはワーカーの実行頻度です。(そしてのインデックスending_at。)

オークションごとに別々のワーカーを使用しないことを強くお勧めします。

于 2012-08-07T23:31:12.840 に答える