2017-06-07 62 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點拆分集合

此外,具有嵌入到用戶的文檔點,你可以利用 文件級鎖(如果使用的是有線虎存儲引擎)。否則,如果您處於併發系統中,使用這兩種集合設計,您必須在應用程序級別自行處理鎖定機制。

相關問題