Должен ли я читать весь набор данных, чтобы отсортировать результаты гео-запросов по расстоянию?

Для выполнения гео-запросов в Firebase или Firestore существуют библиотеки вроде GeoFire и GeoFirestore. Но чтобы отсортировать результаты этого географического запроса по расстоянию, необходимо прочитать весь набор данных, верно? Если географический запрос дает большое количество результатов, нет возможности разбить эти результаты на страницы (на сервере, а не для пользователя) при сортировке по расстоянию, есть ли?


person acidgate    schedule 08.02.2019    source источник


Ответы (1)


Да, для сортировки по расстоянию вы должны прочитать все результаты, попадающие в диапазон Geoquery.

Причина этого в том, как работают такие запросы: они возвращают набор документов, которые находятся в диапазоне значений геохеша, который не обязательно совпадает с порядком их расстояния до центра запроса.

Это также означает, что нет возможности выполнить значимую разбивку на страницы в списке документов, упорядоченных по их расстоянию, поскольку вам в любом случае необходимо прочитать все результаты. Лучшее, что я могу придумать, - это реализовать Geoquery в облачных функциях, чтобы вы могли выполнять сортировку / фильтрацию и только возвращать полную страницу результатов клиенту. Хотя это не экономит на ваших расходах (поскольку вы все еще читаете все документы в диапазоне), это сэкономит пропускную способность при отправке документов пользователю.

Чтобы узнать больше о том, как работают такие геозапросы и почему их нельзя оптимизировать так, как вам нужно, посмотрите видео с моим выступлением здесь или эта статья + более короткий видеоролик на сайте Джеффа Делани.

person Frank van Puffelen    schedule 09.02.2019
comment
Привет ... глядя на ваше видео, я понимаю, что это ограничение firestore все еще присутствует, потому что все еще сравнивается один диапазон в одном запросе: для фильтрации документов в радиусе по расстоянию нам все равно нужно получить все документы, присутствующие в геохешах, покрывающих этот радиус. ..и так пагинация по-прежнему не может быть реализована: это все еще в силе? Для производственного приложения в качестве приложения для верховой езды / доставки на основе местоположения я пытаюсь оценить, если превышение затрат делает жизнеспособным выбор Firestore из базы данных SQL? другие разработчики все еще выбирают в таком случае? - person LearningPath; 09.04.2021
comment
Да, все это по-прежнему применимо, и вряд ли когда-либо изменится при использовании геохешей для выполнения геозапросов. Рекомендовать другие варианты не по теме на Stack Overflow, но поисковые системы отлично подходят для этого. - person Frank van Puffelen; 09.04.2021