mongodb存储gps跟踪数据的最有效方法

时间:2017-06-07 13:45:12

标签: mongodb

我需要存储来自不同用户的gps点(timestamp,lon,lat)。

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

用户

{_id: 1, name: 'A'}

GPS

{_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 DB来说会很疯狂,但我不确定MongoDB对性能的影响

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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