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

6
我有一个数据模型问题,涉及GPS跟踪应用。当用户使用我们的应用时,它会每5秒保存一次纬度、经度、当前速度、时间戳和燃烧的卡路里。完成锻炼后,锻炼的平均速度、总时间/距离和燃烧的卡路里将存储在数据库中。到目前为止都很好。
我们想要的是还要存储那些每5秒保存的数据,这样我们就可以随后利用它来绘制锻炼的图表/图形等。
如何在数据库中存储这么多数据?如果有人跑步一个小时,单次锻炼可能包含720行。也许可以在单个行中使用序列化/压缩数据数组。但我知道这是不好的做法。
关系型的一对多/多对多模型是否可行?我知道MySQL可以轻松处理大量数据,但我们正在谈论720 * 每周两次锻炼 * 7000个用户=每周超过1000万行的数据。
(当然,我们可以仅存储每10秒的数据以减少行数,或每20秒等,但随着时间的推移,数据仍将非常庞大,并且图表的准确性将降低)
你会如何处理这个问题?感谢您提前的回答!

这样的问题应该在Programmers.se上提问,因为它们过于宽泛和基于个人观点,无法适用于SO的格式。几乎任何以“最佳实践”开头的问题都可能被认为是不适合本网站的话题。看看我的示例问题吧。此外,给出的答案是对你自己提出的问题的有趣观点。 - trejder
2
@trejder,当引用其他网站时,有一点很值得指出,即 跨贴 是不被赞同的。 - gnat
@gnat 当然,你是对的。对我来说,“去那里问”是如此明显和容易缩小到“去那里问,删除这里”,以至于我经常忘记这一点。感谢你指出这一点。 - trejder
1个回答

8

一些想法:

  1. 量化您的经纬度数据。出于技术原因,我相信数据很可能已经被量化了,因此如果您能检测到量化,您可以使用它。这里的想法是将双精度数字转换为合理的整数。在最坏的情况下,您可以按照双精度数字提供的精度进行量化,这意味着使用64位整数,但我非常怀疑您的数据甚至接近那个分辨率。也许一个简单的网格,边长约为一米,对您来说就足够了?
  2. 计算差异。大多数数字在绝对值方面都相当大,但也非常接近(除非您的成员在半个世界四处奔波...)。因此,这将导致相当小的数字。此外,只要人们以恒定的速度沿着恒定的方向奔跑,您就会经常看到相同的差异。步骤1中空间网格越粗,您在此处得到完全相同的差异的可能性就越大。
  3. 计算这些差异的Huffman编码。您可以尝试分别编码纬度和经度移动,或者计算具有2d位移向量的单个代码的叶子。尝试并比较结果。
  4. 将结果与用于解码Huffman编码的字典以及初始位置一起存储在BLOB中,以便您可以将数据返回到绝对坐标。

每个数据集的结果应该是一组相当小的数据,您可以作为一个整体检索和解压缩。无法从数据库中检索单个部分,但听起来您不需要那个。

Huffman编码优于gzip的好处在于,您不必人为地引入一个中间字节流。直接对遇到的实际差异进行编码,并带有它们的各自属性,应该效果更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接