6

私はphpActiveRecord、mySQL を使用してセンサー ネットワークからデータを取得し、それをクライアント上の多数の flot.js グラフにプロットするアプリを使用しています。

グラフが表示するデータの範囲に影響を与えるために、ユーザーが選択できる時間枠がいくつかあります。2hrs, 24hrs, 3 days and 1 week.

センサーは 60 秒ごとにデータベースに投稿するため、グラフをプロットすると、クエリはnow and DATE_SUB(CUR_DATE - INTERVAL ? DAY)where ?の間のすべての行を取り込みます。1、3、7 などのいずれかです。

ただし、これにより膨大な数の行が返され(60,000 + for the full week!)、膨大な遅延とサーバー エラーが発生します。

ファイル内のクエリに使用できる最大メモリを大幅に増やすことができることはわかっていphp.iniますが、これは良い解決策とは言えず、速度の問題も解決しません。

私の質問は、ユーザーが表示したい間隔の長さに応じて、必要な日付範囲から 2 行ごとまたは 3 行ごとに簡単に選択できる方法はありますか?

CまたはJavaでは、モジュロ選択のようなことを行って代替行を返しますが、現在のフレームワークでこれを行う方法は考えられません.

どんなアイデアでも大歓迎です。ありがとう。

4

4 に答える 4

0

2行おきに返すことも理想的な解決策ではありません。キャッシュを使用できます。

最も簡単な方法は、テーブルを別のテーブルにキャッシュすることです。自動 cron ジョブを定期的に構成します。

datas
datas_cache ( Only Results ) 

より専門的なソリューションが必要な場合は、結果をファイルにキャッシュする必要があり、JSON を使用できます

于 2013-12-05T00:12:37.773 に答える
0

試す:

$i = 0;
foreach($row as $data){
  if($i == 1){
    //Do whatever with your 2n record
    $i++;
  }
  if($i > 1){$i = 0;} //Reset the counter
}
于 2013-11-15T11:42:45.223 に答える
0

結局、上記のように行を選択することができました。

ただし、これは私が抱えていた問題の解決策として受け入れられるものではなかったため、問題を完全に回避するために、サーバー側でグラフを生成してみることにしました。非常に多くのデータ ポイントを含むチャートをサーバー上で生成し、画像をネットワーク経由で html5 キャンバスなどにプッシュするだけというのは論理的に思えます。このために pChart を試してみます。いずれにせよ、すべてのレスポンダーに感謝します。

于 2013-12-05T14:52:03.773 に答える