質問: ### 前提・実現したいこと 10分間隔で取得したデータを最大2か月分、データの項目別にグラフにしたいと思っています。 例えば、地点A、B、C についてそれぞれ温度、湿度、照度を取得していた場合、温度、湿度、照度の3つのグラフを表示します。 グラフデータの取得は、ページ表示後に非同期(jQuery使用)で行うつもりです。 サーバ側はPHPで実装します。 取得したデータはDBに保存してあり、1レコードに取得日時、地点名、温度、湿度、照度を持っています。 データ数が多いので何回かに分けて取得しようと思っているのですが、どのように実装するのがいいでしょうか(レスポンス・負荷的に)。 案1、案2と挙げましたが他にいい方法があれば教えていただきたいです。 ### 案1 1. グラフごとに非同期通信で2週間分のデータ取得(未取得のデータ有無も同時に取得) 2. グラフにデータ追加 3. 未取得のデータがあれば、1.に戻る * 上記例でいうと、12回(3グラフ×4)の非同期通信が行われる * SQL発行も12回 * 温度、湿度、照度と同一レコードに何度もSQLを発行するのが無駄な気がする ### 案2 1. 非同期通信で各項目の2週間分のデータ取得(未取得のデータ有無も同時に取得) 2. 各項目に対応するグラフにデータ追加 3. 未取得のデータがあれば、1.に戻る * 上記例でいうと、4回の非同期通信が行われる * SQL発行も4回 * 取得データを加工する(温度、湿度、照度ごとのデータに別ける)処理が増える * 1度に取得するデータ量が増える ### 補足 2週間分を一度に取得する、というのに根拠はありません。 現状1週間分であれば待ちなしで取得できているので、それくらいならいけるかな?という感じです。
回答: 案2でいいと思いますよ。 プログラマなんだから論理的に考えればよいのでは。 まず、「日時、湿度、温度、照度」のデータ例を考えると `2019/01/31 11:30:00, +009.123, +045.123, +100.000` みたいな感じなんですかね? こんな感じだと、すべて1byte文字なので、`50byte`程度のデータ量になります。 これが10分間隔なので、1日で考えると `60*24/10 = 144`回、つまり、`50*144/1000 = 7.2KB` 1日あたり7.2KBのデータを取得するので、2週間分取得すると、`7.2*14 = 100.8KB`、1ヶ月(30日)取得すると`216KB`になります。 現状1週間分で待ち無しとのことですが、ここで取得しているデータ量と比べてみて日数を考えればいいと思います。 (厳密には、「続きがあるか」のデータもありますが、1KB未満で済むと思いますので無視しています) 案1で取得する利点がほぼない(日時のデータを重複取得するので、とてももったいないし、DBへも余計にクエリを投げる必要がある)ので、案2にした上で、上記のようにデータ量を考えると良いと思います。