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