2017-06-07 63 views
2

我需要存储来自不同用户的GPS点(时间戳,lon,lat)。mongodb最有效的方式来存储GPS跟踪数据

我应该有一个单独的用户集合和一个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数据块,但我不知道用MongoDB的

+0

MongoDB需要位置数据为经度,纬度'[lon,lat]'或GeoJSON格式的数组格式,例如'{“type”:“Point”,“coordinates”:[lon,lat]}'以便在地理空间查询中有效,如果这是一个问题。即使您不想要地理空间查询,作为一种良好实践,最好也可以这样保存。 –

回答

2

你必须根据你的应用程序的访问策略设计你的MongoDB集合对性能的影响。

一般情况下,你应该去嵌入点进去用户文档,如果:

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

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

  • 基数是不是太大(记住MongoDB的文件最大尺寸 为16MB)。如果每个用户100K点拆分集合

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

相关问题