2011-12-23 8 views
0

私はPHPに新たなんだ、そう、次のような問題への最も簡単かつ/またはエレガントな解決策になるためにどのように私はいくつかのガイダンスを必要とする:複数のタイムクリティカルなバックグラウンドタスク

私はプロジェクトに取り組んでいましたユーザーが指定した期間に最大50万レコードのテーブルを持ち、バックグラウンドタスクを起動して、マジックを実行するサーバー上でコマンドラインアプリケーションを起動する必要があります。問題は、1分ごとに必要です。何かを行う必要がある場合は、すべての500,000レコード(および数え)をチェックしてください。

タイトルにはタイムクリティカルな意味があります。つまり、ユーザーが期待する時間とタスクが実行される時間の間に最大1分の遅延が許容されます。より良い。

これまでのところ、私は毎分で、サーバーへの例を複数の要求を行うことを、サーバー上で実行される簡単なユーティリティアプリを持っている、非常に汚いオプションを考えることができます:

  • チェック1から100,000の間の記録;
  • 100,000〜200,000のチェックレコード。
  • などあなたはポイントを得る。

そして、サーバは基本的に100,000レコード以下の大量のタスクを開始しますが、私にはもっと早いアプローチが必要です。これはFacebookの通知に似ています。

追加情報:

  • サーバーは、Apache + PHPを使用して、Windows 2008
  • ある

EDIT 1

  • ユーザーが持っているあたり3つのタスクの平均約6〜8時間で1日nterval
  • 複数のタスクの半分以上は、同じ時間に実行日あたり少なくとも1時間することができ[!]

任意の提案が高く評価されます!

+0

通常、以前のタスクが実行中であるかどうかを確認してから、そのタスクを終了するか、新しいタスクを開始しないで終了するまでに時間がかかります。これは実際に必要なものによって決まります。同一のタスクはどんな状況下でも2回実行されず、タスクは毎分実行されます。 – ThiefMaster

答えて

0

私はこの質問に十分な時間を与えてくれたと思うが、サーバーのIPからしかアクセスできないURLへのリクエストを作成するユーティリティアプリケーション(サーバー上にある)に固執し、それぞれの新しいスレッドを生成する複数のタスクを同時に実行する必要がある場合は、スケーラブルではありませんが、今のところ実行する必要があります。

1

最も簡単なアプローチは、時間をかけて実行され、処理が必要なレコードに関する通知を受け取る永続タスクを使用することです。その後すぐに処理するか、特定の時間に処理する必要がある場合は、その時間に達するか別の通知が到着するまでスリープすることができます。

+0

+1コメントをいただきありがとうございます。重要な情報を残しておられたことを思い出しました。「編集1」をご覧になり、回答を編集してください。 – ComputerSaysNo

関連する問題