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