【问题标题】:mongodb most efficient way to store gps tracking datamongodb最有效的存储gps跟踪数据的方法
【发布时间】:2017-06-07 13:45:12
【问题描述】:

我需要存储来自不同用户的 GPS 点(时间戳、经度、纬度)。

我应该有一个单独的用户集合和一个 gps 数据集合吗:

用户

{_id: 1, name: 'A'}

全球定位系统

{_id: 1, userId: 1, timestamp: ..., lon: ..., lat: ...}
{_id: 2, userId: 1, timestamp: ..., lon: ..., lat: ...}

或者我可以将gps数据作为数组保存到相应的用户文档中:

用户

{_id: 1, name: 'A', gps: [
     {timestamp: ..., lon: ..., lat: ...}
     {timestamp: ..., lon: ..., lat: ...}
]}

我知道选项 2 对 SQL 数据库来说太疯狂了,但我不确定 MongoDB 的性能影响

【问题讨论】:

  • MongoDB 要求位置数据采用经度、纬度 [lon,lat] 或 GeoJSON 格式(例如 { "type": "Point", "coordinates": [lon,lat] })的数组格式,以便有效地用于地理空间查询(如果这是一个问题)。即使您不想要地理空间查询,最好还是以这种方式存储。

标签: mongodb


【解决方案1】:

您必须根据应用程序的访问策略来设计 MongoDB 集合。

一般情况下,您应该在以下情况下将点嵌入用户文档:

  • 当用户信息被检索时,嵌入数据(点)总是被检索 取回。如果您总是在检索用户信息,但很少需要 GPS 数据,那么嵌入就不会那么好。

  • 嵌入式数据不受修改(或至少很少)

  • 基数不太大(记住 MongoDB 文档最大大小 为 16MB)。如果每个用户有 100K 点,则拆分集合

此外,将点嵌入到用户文档中,您可以利用 文档级锁定(如果您使用的是 Wired Tiger 存储引擎)。否则,如果您在并发系统中,则使用两个集合设计,您必须在应用程序级别自行处理锁定机制。

【讨论】:

    猜你喜欢
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多