2

これを行うための最良の方法についてアドバイスが必要です。データストリームを監視し、それをデータベースに追加するWebアプリケーションを開発しています。次に、特定の基準についてルールセットと照合します。これらの基準の1つが満たされた場合、x分後に同じエントリに対して特定のクエリを実行する必要があります。(xはユーザー設定によって設定されます)。

cronジョブを作成する方法を考えていましたが、まずはその方法がわかりません。次に、もっと良い方法があるかどうか疑問に思いました。

受信したエントリ->条件に一致->X分待機->別のクエリを実行します。

大量のデータが着信するため、スクリプトを一時停止せずにこれを行う必要があります。そのため、10分間待機すると、すべてのデータが処理されることはありません。

ありがとう!

4

4 に答える 4

2

このような類似したタスクが多数ある場合は、タスクのテーブルを作成し、必要に応じてデータを入力できます。

次に、毎分実行されるcronスクリプトは、実行時間が現在の時間以下であるこのテーブルからすべてのエントリを選択して実行できます。

于 2013-03-12T19:10:49.580 に答える
1

複数のcronジョブを作成しないでください。

ユーザー構成をタイムスタンプとして保存し(将来)、頻繁に実行される1つのcronジョブ(最大で1分ごと)を持ち、ユーザー構成のリストを照会して、別の照会を実行する必要があるかどうかを確認します。

cronジョブの最後の実行時間を保存し、リストにクエリを実行させます-

SELECT * FROM `pending_queries` WHERE `execution_ts` <= {$last_execution_ts}

警告の言葉

一部のクエリの実行に時間がかかる場合、1つ以上のクエリの実行時間が重複する可能性があります。これを解決するには、保留中のクエリでデータを抽出したらすぐにis_processing、その行の他のフィールドとしてフラグを付けてマークする必要があります。したがって、クエリは次のようになります-

SELECT * FROM `pending_queries` WHERE 
  `execution_ts` <= {$last_Execution_ts} AND `is_processing`=0

最後に、クエリを処理した後、pending_queriesテーブルから削除する必要があります。

于 2013-03-12T19:15:47.943 に答える
0

最初の最も簡単な方法:

cronjobを学びます。

2番目の方法:

スクリプトの実行を停止せずに10分間待機する場合、ユーザーは10分間待機する必要があります。

ユーザーに迷惑をかけずにこの操作を実行したい場合は、この操作を処理する子プロセスを作成できます。プロセスは停止しませんが、ユーザーとの対話は終了します。子プロセスでは、スクリプトを10分間一時停止できます。

子プロセスを作成する方法:http://php.net/manual/en/function.pcntl-fork.php

プロセスを一時停止する方法:http://php.net/manual/en/function.sleep.php

于 2013-03-12T19:10:01.017 に答える
0

私はJS/JQueryとPHPを使用して同様の問題を自分で解決しました。これがそのための一種の擬似コードです:

  pingTimer = 0;
  function pingTimerIncrement() {
     //your criterias to be checked here either using plain 
     //JS or AJAX to do it on server side
     if (criterias met) {
       pingTimer += 1; //increase by 1 minute

       if (pingTimer == YOUR_USER_CONFIG_MINUTES) {
          //code to update your database using ajax
       }
     }
  }

  $(function() {
     var timerInterval = setInterval("pingTimerIncrement()", 6000); //1 minute
  });

JS / JQueryを使用したくない場合は、cronjobを使用してください

于 2013-03-12T19:10:19.703 に答える