6

GPS 追跡アプリのデータモデルに関する質問があります。誰かが私たちのアプリを使用すると、緯度、経度、現在の速度、タイムスタンプ、burn_calories が 5 秒ごとに保存されます。ワークアウトが完了すると、ワークアウトの平均速度、合計時間/距離、消費カロリーがデータベースに保存されます。ここまでは順調ですね..

必要なのは、5 秒ごとに保存されるデータも保存することです。これにより、後でこれを利用して、たとえばワークアウトのグラフ/チャートをプロットできます。

この量のデータをデータベースに格納するにはどうすればよいでしょうか? 誰かが 1 時間ランニングした場合、1 つのワークアウトには 720 行を含めることができます。おそらく、単一行のシリアル化/gzcompressed データ配列です。私はこれが悪い習慣であることを知っています..

リレーショナル 1/多対多モデルは取り消されますか? MySQL が大量のデータを簡単に処理できることは知っていますが、720 * 週 2 回のワークアウト * 7,000 ユーザー = 1 週間に 1,000 万行を超えるということです。(もちろん、行数を半分にするために 10 秒ごと、または 20 秒ごとなどのデータしか格納できませんでしたが、それでも時間の経過とともに大量のデータになり、グラフの精度が低下します)

これをどのように行いますか?ご意見をお寄せいただきありがとうございます。

4

1 に答える 1

8

いくつかのアイデア:

  1. 緯度/経度データを量子化します。技術的な理由から、データはすでに量子化されている可能性が高いと思います。そのため、その量子化を検出できる場合は、それを使用できます。ここでの考え方は、倍精度の数値を適切な整数に変換することです。最悪の場合、倍精度数が提供する精度に量子化することもできます。つまり、64 ビット整数を使用することになりますが、データがその解像度に近いかどうかは非常に疑わしいです。おそらく、辺の長さが約 1 メートルの単純なグリッドで十分でしょうか?
  2. 差を計算します。ほとんどの数値は、絶対値としてはかなり大きくなりますが、非常に近い数値になります (メンバーが世界の半分を走り回っている場合を除きます…)。したがって、これはかなり小さな数になります。さらに、人が一定の速度で一定の方向に走っている限り、同じような違いがよく見られます。ステップ 1 の空間グリッドが粗いほど、ここでまったく同じ違いが得られる可能性が高くなります。
  3. これらの差についてハフマン コードを計算します。緯度と経度の動きを別々にエンコードするか、葉に 2 次元変位ベクトルを使用して単一のコードを計算してみてください。両方を試して、結果を比較してください。
  4. 結果を BLOB に格納し、ハフマン コードをデコードするための辞書と、データを絶対座標に戻すための初期位置を一緒に格納します。

結果は、データ セットごとにかなり小さなデータ セットになるはずであり、全体として取得して解凍することができます。データベースから個々のパーツを取得することはできませんが、それは必要ないように思えます。

gzip に対するハフマン コーディングの利点は、中間バイト ストリームを人為的に導入する必要がないことです。遭遇した実際の違いを個々のプロパティで直接エンコードすると、はるかにうまく機能するはずです。

于 2012-11-02T15:46:21.183 に答える