2dsphere vs 2d index: что лучше или быстрее?
Ι имеют db, где мои документы всего Points
. Я считаю, что добавить геопространственный индекс. Поэтому я могу выбрать 2dsphere и 2d.
У MongoDB.org есть:
Поддержка индексов 2dsphere:
- Calculations on a sphere
- Both GeoJSON objects and legacy coordinate pairs
- A compound index with scalar index fields (i.e. ascending or
descending) as a prefix or suffix of the 2dsphere index field
Поддержка 2-х индексов:
- Calculations using flat geometry
- Legacy coordinate pairs (i.e., geospatial points on a flat
coordinate system)
- A compound index with only one additional field, as a suffix of
the 2d index field
Однако, поскольку все мои документы являются точками, я могу либо иметь один из вариантов ниже в моей схеме без особых изменений.
для 2dsphere:
location : {
type : "Point" ,
coordinates : [10,45]
}
или для индекса 2d:
location : [10,45]
Мой вопрос сводится к тому, что быстрее? Я действительно не знаю, как его измерить.
Вопрос предполагает, что я хочу только запросить квадрат box
данных и не заботятся о сложных поисках полигонов: либо с $box, который поддерживается только по индексу 2d (если я правильно прочитал) или с помощью метода $polygon $geoWithi n, поддерживаемого оба индекса.
Ответы
Ответ 1
В дополнение к исследованию, которое вы уже сделали, просто захотелось добавить еще одну разницу, с которой я столкнулся между этими двумя индексами.
По умолчанию индекс 2d для устаревших пар координат использует 26 бит точности, что примерно эквивалентно точности в 2 фута или 60 сантиметров с использованием диапазона по умолчанию от -180 до 180. Точность измеряется размером в битах значения geohash, используемые для хранения данных местоположения. Вы можете настроить геопространственные индексы с точностью до 32 бит.
db.<collection>.ensureIndex( {<location field> : "<index type>"} ,
{ bits : <bit precision> } )
Источник:
ссылка на сайт MongoDB