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

Posted

技术标签:

【中文标题】在 mysql 数据库中存储跟踪应用程序的 GPS 数据的最佳实践【英文标题】:Best practice for storing GPS data of a tracking app in mysql database 【发布时间】:2012-10-23 05:44:11 【问题描述】:

我有一个关于 GPS 跟踪应用程序的数据模型问题。当有人使用我们的应用程序时,它会每 5 秒保存一次纬度、经度、当前速度、时间戳和燃烧卡路里。锻炼完成后,锻炼的平均速度、总时间/距离和消耗的卡路里将存储在数据库中。到目前为止一切顺利..

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

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

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

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

【问题讨论】:

这样的问题绝对应该在 Programmers.se 上提出,因为它们太宽泛,而且基于意见的方式无法支持 SO 格式。几乎任何以“最佳实践”开头的问题都可能被视为与本网站无关。看看my example question。另外,given answer 是对您自己的问题的一个有趣的观点,在这里提出。 @trejder 在引用其他网站时,通常值得指出的是cross-posting is frowned upon @gnat 当然,你是对的。对我来说,“问那里”是如此明显,并且很容易缩小到“那里问,在这里删除”,以至于我经常忘记这一点。谢谢你指出这一点。 【参考方案1】:

只是一些想法:

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

结果应该是每个数据集的一小部分数据,您可以将其作为一个整体进行检索和解压缩。从数据库中检索单个部分是不可能的,但听起来您不需要这样做。

霍夫曼编码优于 gzip 的好处是您不必人为地引入中间字节流。使用它们各自的属性直接编码您遇到的实际差异应该会更好。

【讨论】:

以上是关于在 mysql 数据库中存储跟踪应用程序的 GPS 数据的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

可以使用 Google API 通过 android 移动 gps 跟踪位置吗?

iOS Swift将GPS坐标存储到数组中

在 iPhone 崩溃应用中使用 GPS 跟踪位置

如何使用数据库(mysql)中的gps位置在两个地理点之间找到pople?

即使用户没有打开应用程序,是不是可以在 android 中跟踪 GPS 位置

如何使用推送通知启动 GPS 跟踪