С введением 2.3 >
MongoDB стала еще более полезной для обработки и запросов данных о местоположении. MongoDB хранит документы как BSON, поэтому каждый документ имеет все поля документа, что, очевидно, потенциально приводит к увеличению базы данных, чем наша обычная RMDBS.
Раньше я хранил ломаные линии и многоугольники в виде серии индексированных точек с дополнительным полем, представляющим порядок каждой линии (я делал это для обеспечения согласованности при использовании 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
, мне не нужно будет сначала конвертировать ее в GeoJSON, прежде чем использовать ее в качестве параметраquery
.
В чем я не уверен:
- Будет ли в будущем прекращена поддержка
loc: [x,y]
в MongoDB - Любая индексация выигрывает от
2dsphere
, а не2d
- Могут ли какие-либо запланированные
GeoJSON
дополнения к MongoDB привести к необходимости согласованности, упомянутой выше.
Я лучше перейду на GeoJSON
, пока мои данные все еще в порядке, чем перейду в будущем под большим давлением.
Пожалуйста, попрошу обстоятельно (хотя бы немного) обдуманно ответить. Я не буду выбирать правильный ответ в ближайшее время, поэтому я могу оценить любые ответы.
Я также не уверен, что SO является правильным местом для постановки вопроса, поэтому, если DBA является более подходящим местом, я перенесу вопрос туда. Я выбрал SO, потому что здесь много действий, связанных с MongoDB.