PHP/mySQL - 新規ユーザーがデータを送信すると、ベンチマーク値が定期的に再計算されます。
-
01-07-2019 - |
質問
私は、まだ若いプログラミングの「キャリア」の中で、まだ遭遇したことのない新しい種類の問題に直面しています。この問題に取り組む最善の方法についてあなたの意見を知りたいと思っています。
状況研究アプリケーション (php/mysql) は、ユーザーからストレスに関連した健康データを収集します。ユーザーはアンケートに記入した後、分析を受け取ります。各パラメータの値は、ベンチマーク (既存のデータセットの平均値と標準偏差) を使用してパーセンタイル値に変換されます。
タスクアンケートに回答する人が増えているため、新しいユーザー データを使用してベンチマーク値 (平均/SD) を再計算することで、より正確になる可能性があります。データベースでベンチマーク値を更新するスクリプトを定期的に実行したいと考えています。
質問私はこれまでストアド プレシジャを使用したことがなく、ストアド プレシジャが何であるかについてはほんの少ししか理解していませんが、どういうわけかストアド プレシジャがこれに役立つ可能性があると感じています。それとも、スクリプトを php として記述してから、cron ジョブを設定する必要がありますか?
[編集]最初のいくつかの回答の後では、明らかに cron が最適な方法であるように見えます。[/edit]
解決
あなたが検討していることは、さまざまな方法で実現できます。
新しいレコードが更新されるたびに値を再計算するトリガーを DB に設定できます。必要に応じて、値を更新するために必要なコードを sproc に保存できます。
PHP スクリプトを作成し、cron 経由で定期的に実行することができます。
#1 ではデータベースへの挿入が遅くなりますが、データは確実に挿入されます。 いつも 最新の。#2 は新しい値を更新する間テーブルをロックする可能性があり、データが正確になるのは次の更新までです。#2 は、作成するバックアップにトリガーと sproc 作成スクリプトを保存する必要があるのに対し、スクリプトはバージョニング システムに簡単に保存できるため、バックアップがはるかに簡単です。
明らかに、方法を選択する前に要件を比較検討する必要があります。
他のヒント
PHP を cron ジョブとして設定すると、ソース コード管理システムに PHP を保存できます。また、データベース抽象化レイヤーを使用している場合は、切り替えた場合でも他のデータベースに移植できます。こうした理由から、私はストアド プロシージャではなくスクリプトを使用する傾向があります。
これを機能させる最も簡単な方法は、おそらく、Web サイトで使用しているのと同じ言語 (PHP のように聞こえる) でスクリプトを作成し、それを cron から呼び出すことです。
ロジックを 2 つの場所 (既存の計算とストアド プロシージャ) に配置することで、必要以上に複雑にする必要はありません。
データの量が十分に大きく、その場で計算するのが多すぎる場合は、次のいずれかを実行します。
- 合計を非正規化するためのPHPスクリプトを使用したCronジョブ
- 合計を増加させる挿入時のトリガー
と一緒に行きましょう cronジョブ 方法。シンプルでしっかりとした作品。PHP/MySQL の世界では、ストアド プロシージャは使用できません。