隨着2.3 >
的推出,MongoDB在位置數據處理和查詢方面變得更加有用。 MongoDB將文檔存儲爲BSON,因此每個文檔都具有所有文檔字段,這顯然可能導致比我們的傳統RMDBS更大的數據庫。GeoJSON和MongoDB:將點存儲爲GeoJSON.Point是否值得?
我曾經將多段線和多邊形存儲爲一系列索引點,並使用一個額外的字段來表示每行的順序(爲了確保一致性,我使用JavaScript,因此點並不總是存儲在其中正確的順序)。它是這樣的:
polyline: {
[
point: [0,0],
order: 0
],
[
point: [0,1],
order: 1
]
}
而現在我使用:
polyline: {
type: 'LineString',
coordinates: [
[0,0],
[1,0]
]
}
我見過的改善的文件大小,因爲有些多義線最多可以有500點。
但是,我想知道將我的所有Point
數據存儲爲GeoJSON
的好處是什麼。我在文件大小增加氣餒,例如:
loc: [1,0]
是更好的方式比
loc: {
type: 'Point',
coordinates: [0,1]
}
,因而會更容易的工作。
我的問題是:
是更好/推薦存儲點作爲GeoJSON
對象,而不是一個2點陣列?
我所考慮的是以下幾點:
- 大小限制:我可能有幾百萬的一個位置,這可能會影響集合的大小的文件,並有可能我的口袋裏。
- 一致性:最好處理
lng, lat
格式的每一組座標,而不是堅持lat, lng
爲點,而前者是我所有其他位置特徵。 - 便利性:如果我抓住一個點,並使用
$geoWithin
或$geoIntersects
,那麼在將它用作參數query
之前,我不需要先將它轉換爲GeoJSON。
什麼我不確定的是:
- 無論
loc: [x,y]
支持將在未來有關MongoDB被丟棄從2dsphere
- 任何索引的好處,而不是
2d
- 無論任何計劃
GeoJSON
對MongoDB的補充可能會導致需要上述的一致性。
我寧願移動到GeoJSON
,而我的數據仍然可以管理,而不是在將來會在很大的壓力下切換。
請允許我請一個徹底的(即使有點)想出來的答案。我不會很快選擇正確的答案,所以我可以評估任何迴應。
我也不確定SO是否是提出問題的正確位置,所以如果DBA是更合適的地方,我會在那裏提出問題。我選擇了SO,因爲這裏有很多與MongoDB相關的活動。
我接受你的答案。你的第二點是讓我信服的那一點。我已經閱讀了它,但忘記了我現在可以在2dsphere上使用複合索引 – 2013-06-01 15:35:28