Существует ли база данных, поддерживающая 2 геопространственных индекса? - PullRequest
0 голосов
/ 25 марта 2012

Я ищу базу данных, реализующую 2 геопространственных индекса или позволяющую эффективно имитировать ее.

Мотивация: наше приложение имеет дело с векторами, а не с местоположениями, и нам часто нужно найти все записи, где находится источникрядом с чем-то, а пункт назначения рядом с чем-то другим.

У Mongodb его нет.Есть ли база данных?

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

Спасибо.

1 Ответ

1 голос
/ 30 марта 2012

Может быть возможно подделать это с MapReduce в Mongo, но это будет только подходящим для использования в качестве пакетного задания и вряд ли будет работать хорошо как запрос уровня приложения.

Обходной путь - хранить исходную и целевую точки в отдельных коллекциях Монго. Затем вы можете выполнить запрос к исходной коллекции, используя $ near, чтобы вывести самые близкие точки к исходной точке, затем выполнить другой запрос $ near для целевой коллекции и вычислить пересечение в памяти.

Другой вариант - поскольку вы можете использовать геопространственный индекс для индексации поля, содержащего массив точек, сохраните исходную и конечную точки как элементы в массиве. Затем выполните два запроса к этой коллекции (один для исходной точки, один для места назначения) и просмотрите два набора результатов, чтобы вычислить окончательный результат (запросы не будут различать, какое совпадение было источником, а какое - получателем, так что вам нужно проверить это на стороне клиента).

...