Лучший способ организовать результаты поиска по местоположению в бэкенде Django Rest Framework?

Есть несколько наивных способов сделать это, но мне интересно, есть ли более опытный способ достичь этой функциональности. У меня есть бэкэнд на базе django rest framework и фронтэнд на базе react native. У меня есть таблица с объектами, которая включает объект Address с адресом улицы объекта. Я хотел бы вернуть результаты, отсортированные по расстоянию от пользователя. Сейчас база данных небольшая, но вскоре может потребоваться постраничная сортировка результатов.

У меня есть пара идей, но мне интересно, есть ли более чистый способ решить эту задачу.

Например, поле адреса содержит часть lat/lng, которая в настоящее время остается пустой, одна из идей - заполнять это поле при создании/обновлении, используя функциональность геокодирования API google maps, затем, когда пользователь делает запрос на поиск, мы упорядочиваем по l2 расстояние от их координат. Одна из проблем заключается в том, что это может стать очень неэффективным при увеличении размера таблицы. Если нам потребуется O(N log N) операций каждый раз, когда пользователь находится в другом месте - даже при использовании таких трюков, как кэширование. Я знаю, что некоторые крупные компании разделяют свои базы данных по регионам, чтобы помочь с накладными расходами в подобных ситуациях, но мы сейчас относительно небольшие, поэтому такой подход был бы излишним.

Буду признателен за любой совет, который поможет мне найти решение этой проблемы. Я также могу предоставить дополнительную информацию.

Вернуться на верх