如何在数据库中存储8000亿个GPS标记

14
我需要将用户记录的GPS轨迹存储到数据库中。这些轨迹将由每5米位置处的标记组成,以在地图上绘制线路。我估计200公里的轨迹将包含40,000个位置标记。我预计至少有50,000个用户,每个用户会有20段200公里的轨迹记录。这意味着至少有40亿个位置标记。
这还需要具备可扩展性,因此对于100万用户,我需要容纳8000亿个GPS标记。
由于每组40,000个标记属于单个轨迹,所以我们将处理1-20百万条GPS轨迹记录/集。
需求: 用户将请求在移动应用程序中查看叠加在Google地图上的轨迹。
关系: 我目前有两个表。第一个表具有:[trackid],[userid],[comment],[distance],[time],[top speed].
表2具有[trackid] [longitude] [latitude],这是存储所有GPS标记的位置。如何有效地存储这些GPS数据量同时保持读写性能?
新信息: 将GPS数据存储在KML文件中以便在Google地图上作为轨迹显示是一个不错的解决方案,可以节省数据库空间。将KML压缩成KMZ(基本上是带有KMZ扩展名的压缩KML)可以进一步减小文件大小。KMZ比GPX加载更快,并可以作为KML图层与Google Maps API集成。有关详细信息,请参见Google的此信息。这似乎是目前针对预期要求的最佳解决方案。

1
你甚至可以将它存储在平面文件中,一个标记具有固定长度,因此您可以轻松地查找文件。 - Andrey
5
根据该网站的准则,我不确定产品推荐是否属于主题或有建设性。但听起来这是高度规范化的数据。任何好的关系型数据库管理系统都应该可以胜任。 - David
1
@DavidStratton 我认为在关系型数据库中存储这种数据是很大的开销。因为它基本上是二进制数据。 - Andrey
@DaveM 我决定使用MongoDB。一个集合保存记录信息,如[trackid][userid][distance][time][speed][comment]。 trackID指的是带有经度/纬度/时间戳的CSV文件。 为了保持文件大小,我记录了一个新的GPS点,并设置了约束条件:最小距离5米,最大距离200米,并将位置频率检查设置为最小。如果用户在高速公路上巡航,它不会浪费空间。同样,当交通缓慢时,详细信息得以保留。这是谷歌从另一个应用程序中提出的解决方案。 - Karl
1
@karl “这是谷歌为另一个应用程序提供的解决方案”,支持开源+1。很高兴这个想法帮助你找到了适当的答案解决了你的问题。 - DaveM
显示剩余4条评论
1个回答

7
选择特定的数据库,通常与您希望如何存储信息和使用信息有关。因此,如果不知道项目的具体要求以及数据之间的关系,则最好做的事情是阅读相关主题的文献,确定哪种产品或存储模型最适合您。一个好的开始是阅读比较数据库性能和用途的博客(请参见附件)。

http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis


1
收到。我修改了问题的措辞,并添加了此问题的要求以及当前表格之间的关系。也许可以重新打开吗? - Karl
2
有兴趣管理大量GPS标记数据的人可以在此处阅读更多信息:https://developers.google.com/maps/articles/toomanymarkers,了解Google解决方案,如融合表。 - Karl
3
没问题,我会继续研究这个话题并添加新信息,因为其他人可能对解决类似问题的方法感兴趣。 - Karl
我有一个类似的问题(设计)。@Karl,你找到任何解决方案或进一步建议了吗? - Skeletor
1
@Skeletor 我的解决方案是将相关标记的列表保存在一个kml文件中,并为其分配一个唯一的ID,该ID在数据库中被引用。这样,数据库的大小可以缩小4000倍,只包含引用而不是静态数据点。 - Karl
显示剩余3条评论

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