0

ユーザーアクティビティに関するレポートの作成を担当する resque ジョブクラスがあります。クラスはデータベースにクエリを実行し、多数の計算/データ解析を実行して、特定の人に電子メールを送信します。私の質問は、多数のメソッド (200 行程度のコード) を持つこのような resque ジョブを、すべてのクラス メソッドで埋め、単一の ResqueClass.perform メソッドに応答する必要があるかどうかです。または、作成されている単一のレポートを表すために、この resque クラスの新しいインスタンスをインスタンス化する必要がありますか? 両方の方法でデータが適切に計算されて電子メールで送信される場合、バックグラウンド ジョブでデータを処理する方法に関する規則やベスト プラクティスはありますか?

ありがとうございました

4

1 に答える 1

1

どちらの戦略も有効です。私は通常、並行性の観点からこれに取り組みます。ジョブの実行中は、ジョブにサービスを提供している resque ワーカーがビジーであるため、N 個のワーカーがあり、これらのジョブが N 個実行されている場合、キュー内の他のものが処理される前に、1 つが完了するまで待機する必要があります。

おそらくそれで問題ありません。一度に 1 つのレポートしかない場合、実質的に 1 人のワーカーがレポートの実行に専念し、他のワーカーは他のことを行うことができます。ただし、これらの山があり、時間がかかる場合は、キュー内の他のジョブに影響を与える可能性があります.

欠点は、レポートが機能しなくなった場合に、中断したところから再開するためのロジックが必要になる場合があることです。ユーザーごとに 1 回レポートをインスタンス化する場合は、失敗したジョブを再試行するだけで済みます。「どこにいたか」というロジックは必要ありません。

于 2013-03-04T21:20:56.637 に答える