在mysql数据库中存储跟踪应用程序的GPS数据的最佳实践

时间:2012-11-02 14:37:21

标签: mysql database mapping datamodel

我有GPS跟踪应用程序的数据模型问题。当有人使用我们的应用程序时,它将每5秒节省一次纬度,经度,当前速度,时间戳和burned_calories。当锻炼完成时,锻炼的平均速度,总时间/距离和燃烧的卡路里将存储在数据库中。到目前为止一直很好..

我们想要的是还存储每5秒保存一次的数据,因此我们稍后可以利用它来绘制锻炼的图表/图表。

我们应该如何将这些数据存储在数据库中?如果有人跑了一个小时,一次锻炼可以包含720行。也许是一行中的序列化/ gz压缩数据数组。我知道这是不好的做法..

关系型/多对多模型将被撤消?我知道MySQL可以轻松处理大量数据,但我们正在谈论720 *训练 每周两次* 7000位用户=每周超过1000万行。 (当然,我们只能存储每10秒钟的数据,以便将行数减半,或者每20秒减半......但是随着时间的推移它仍会是大量的数据+图表的准确度会降低)

你会怎么做? 提前感谢您的意见!

1 个答案:

答案 0 :(得分:6)

只是一些想法:

  1. 量化纬度/经度数据。我相信由于技术原因,数据很可能已经量化,因此如果您可以检测到该量化,则可以使用它。这里的想法是将双数转换为合理的整数。在最坏的情况下,您可以量化为精确的双数提供,这意味着使用64位整数,但我非常怀疑您的数据是否接近该分辨率。也许一个大约一米边长的简单网格对你来说足够了吗?
  2. 计算差异。大多数数字在绝对值方面都相当大,但也非常接近(除非你的成员跑遍世界的一半......)。所以这将导致相当小的数字。此外,只要人们以恒定的速度奔向恒定的方向,你就会经常看到相同的差异。在第1步中,您的空间网格越粗糙,您就越有可能在此获得完全相同的差异。
  3. 为这些差异计算Huffman code。您可以尝试单独编码lat和long运动,或者在其叶子上计算具有2d位移矢量的单个代码。试试两者并比较结果。
  4. 将结果与字典一起存储在BLOB中以解码您的霍夫曼代码,以及初始位置,以便您可以将数据返回到绝对坐标。
  5. 结果应该是每个数据集的一小组数据,您可以从中检索和解压缩整个数据集。从数据库中检索单个部分是不可能的,但听起来你不需要这样做。

    Huffman编码优于gzip的好处是您不必人为地引入中间字节流。直接编码您遇到的实际差异及其各自的属性应该可以更好地工作。