@Kostik_1993
Web Developer

Какой алгоритм поиска по базе более быстрый и менее затратный по ресурсам для выполнения?

У меня есть БД на PostgresQL. Есть список локаций в основном это города либо крупные посёлки. Нужно организовать поиск событий для них и для входящих в определённый радиус от них соседей.

По пути решения вижу два варианта. Первый это задавать latitude logtitude для событий и локаций и потом делать поиска по базе по ним через PostGIS или что-то другое или подобного рода решение

Второй это использовать доп таблицу где будет связь между двумя точками и расстояние между ними. Будут выбираться массив ID-ков локаций под радиус и с ними делаться выборка событий с where in location_id (IDS).

Кажется что первый более гибкий. Но его нужно правильно реализовать чтобы был профит. Второй вариант более жёсткий, но очень понятный и через индексы должно летать + возможно удобно кешировать.

Какой вариант вы бы выбрали и может быть знаете какое-то хорошее решение под это?
  • Вопрос задан
  • 304 просмотра
Решения вопроса 3
AshBlade
@AshBlade
Просто хочу быть счастливым
Попробуй GIST индекс
Ответ написан
Комментировать
На своём проекте я выбрал второй вариант. Предрасчёт занимает какое-то время, но зато потом всё просто и быстро. И с тех пор, как посчитал расстояния четыре года назад, не приходилось трогать это вообще.
Но есть две важных детали: список локаций у нас фиксированный, новые не добавляются и у нас высокая нагрузка и важно время ответа.
Ответ написан
Комментировать
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Второй вариант похож на попытку повторить изкоробочную функциональность графовой СУБД. Так что если Постгрес, то я за первый - PostGIS хорош.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы