внутренний механизм геопространственной индексации в mongodb - PullRequest
6 голосов
/ 27 декабря 2011

Кто-нибудь знает, как работает геопространственная индексация, я имею в виду алгоритм вычисления ближайших точек?

В SQL мы можем делать такие вещи:
SELECT id, (x-a)*(x-a)+(y-b)*(y-b) as distance FROM table1 ORDER by distance ASC
Конечно, это недостаточно эффективно по сравнению с геопространственной индексацией mongodb, но как mongodb рассчитывает и сортирует?

Большое спасибо заранее.

Ответы [ 2 ]

4 голосов
/ 27 декабря 2011

Геопространственное сердце Монгодба - Геохеш .Geohash - это

Иерархическая структура пространственных данных, которая подразделяет пространство на сегменты в форме сетки.

Я не смог найти подходящих ссылок для реализаций Geohash в Монго, ноэта тема может дать некоторое представление.

2 голосов
/ 27 декабря 2011

с сайта 10gen :

Текущая реализация кодирует географические хеш-коды поверх стандарта MongoDB B-деревья. Результаты $ ближайших запросов точны. Одно ограничение с этой кодировкой, хотя и быстро, это то, что поиск префикса не дает точные результаты, особенно вокруг немного перевернутых областей. MongoDB решает это выполнив поиск соседей по сетке после начального сканирования префиксов, чтобы выбрать до каких-то проблемных моментов. Это обычно гарантирует, что производительность остается очень высоким при обеспечении правильных результатов.

...