2017-01-05 9 views
1

単一のデータベースクエリを含むいくつかのエラーチェックを行っています。エラーは、cronジョブが動作を停止しているかどうかをテストすることです。その性質上、PHP関数を実行するためにcronジョブを使用したくありません。すべてのXページビュー(cronの代わり)でPHP関数を実行

すべてのページビューでデータベース呼び出しを実行するのではなく、「Xページビューごとに1回実行する」という別のアプローチを使用すると、読み込み負荷を軽くすることができます。

これは私が聞いたことでも、探すこともできません。これにより、より良い選択肢があると思います。賛否両論を聞くことに非常に興味があります。

答えて

5

実際には、PHPセッションを使用している場合は、すべての呼び出しで既に同じメカニズムを使用しています。 PHPセッションガベージコレクタはまったく同じことを行います - 期限切れのセッションをランダムに削除します。

参照:https://secure.php.net/manual/en/sessionhandler.gc.php

が期限切れのセッションをクリーンアップします。セッションが開始されたとき、またはsession_start()が呼び出されたときにPHPによって内部的にランダムに呼び出されます。これが呼び出される頻度は、session.gc_divisorおよびsession.gc_probability設定ディレクティブに基づいています。

$roll = mt_rand(1, 100); 

if ($roll > 90) { 
    // This will fire in 10% of cases 
    // Do what you need 
} 

しかし、検討することが重要である:

  1. 単に乱数を転がし、それはあなたが必要とする「割合」を超えているかどうかをチェックします。これを行うに

あなたが99%のケースで発射するように設定しても、それは100年もの間ストップしないままです。これは、確率理論の働きによく似ています。

  • 交通量が少ない(一般的に、または特定の日に)、あなたのチェックコードが発火する可能性があり、エラーが発生する可能性があります。
  • 同じ瞬間に2人の異なるユーザーが同時にチェックを2回実行する可能性もあります。だから、あなたが何か問題を引き起こさないように、特にあなたの小切手であなたが何か更新をしていることを確認したいかもしれません。
  • あなたの要求の中には、応答時間が非常に長くなることがあるので、あなたの小切手に重いものを載せないように気をつけましょう(デュアワ、私は知っていますが、完全なものです。
  • ポイント1及び2移動「の信頼性」カテゴリから、この仕組みを「非常に信頼性がない、どちらかとにかく、または別のための追加的な安全対策、信頼性の高いメカニズムとして超重要ではない何かのために」。

    だから、私はすべての重さを測って、それでもやりたいと思うなら、この仕組みを使ってください。

    関連する問題