Есть сервис с пользователями и их местоположением. Допустим мне нужно получить всех пользователей в радиусе 500м от текущего пользователя.
И есть проблема, которая возникает при появлении большого количества пользователей. Для того что бы мне получить список пользователей в радиусе 500м мне нужно выполнить такие шаги: получить из БД всех пользователей, потом вычислить расстояние от текущего пользователя (тот который запросил этот список) до каждого пользователя, отфильтровать всех тех кто дальше чем 500м и вернуть оставшихся. От сюда вывод время которое нужно потратить на вычисления расстояния будет расти в арифметической прогрессии.
Я провел небольшое исследование (рост времени вычисления в зависимости от количества пользователей от 1 000 до 1 000 000, с шагом в 10 000).
И как видно из графика 358 мс это достаточно много, учитывая то что все они могут одновременно это запрашивать.
Может это можно решить другим способом (функция вычисления расстояния наименьшая до не могу)?
Была идея сделать так: разбить всю поверхность Земли на квадраты. Потом определить в каком квадрате находится текущий пользователь и вычислять расстояние только до тех пользователей которые находятся только в этом квадрате.
Но тут возникает другая проблема: а если пользователи находятся в разных но смежных квадратах рядом с границей этих квадратов, то они уже не будут видеть друг друга?