2012-01-04 4 views
0

私の問題はユニークなもののようには見えません。基本的には、定期的に実行する必要があるかなり高価なプロセスがありますが、ユーザーが特定の状態をトリガーする場合にのみ必要です。どのようにしてRailsにトリガを実装しますか?

たとえば、私は「アンケート」システムを持っており、結果を分析し、分析からの推奨を提供します。分析と勧告の作成は高価なプロセスで、時には10〜20秒であり、データセットが増えるにつれて増加する可能性があります。ところで、私は現在、このアルゴリズムのパフォーマンスを改善する方法を検討しています。

私はこの分析/推奨事項が期限切れとなり、この状態をポーリングし、期限切れの場合は高価なプロセスを実行するという状態を実装することを考えています。ユーザーがアンケートを完了したら、この状態を期限切れに設定します。

私の現在のシステムは、レール3.0、ルビー1.9.2、MySQLがEC2サーバで動作しています。私は現在、このプロセスをバックグラウンドジョブにプッシュするためにDelayedJobを使用していますが、状態/トリガーを実装していません。

要約すると、私の質問は1)これはシナリオが与えられた正しいアーキテクチャですか? 2)Railsで使えるこの宝石や実装はありますか?

答えて

1

DJで処理するための分析とキュージョブが必要なアンケートを確認するためのすばやいレイクタスクを作成できます。次に、Clockworkで事前定義された間隔でレーキタスクを実行できます。

EC2を使用しているため、Lightweight Clockworkプロセスを実行するために追加料金を支払う必要はなく、レイクタスクはHTTPリクエストによってトリガーされることなくアプリケーションと同じ環境を簡単に継承できます。

+0

私は間違いなくクロックをチェックアウトするつもりです、これらのルーチンのタスクに便利です。私はそれがジョブを実行するように状態を設定するたびに私はそれをキューに入れることもできると思うが、このシナリオでは役立つとは思わない。私はリアルタイムでほとんど応答が必要なので、私はこれを取り巻く創造的な方法を考えようとしています。 –

+0

アンケートを保存する要求に応答してコントローラーアクション内のキューにジョブをプッシュできます.DJワーカーが利用可能な間は、タスクをキューから取り出して数秒以内に実行します。 – coreyward

関連する問題