Как бы вы реализовали реалтайм гео-сервис? Есть система координат и СУБД, которая умеет в geospatial индексы: по этим индексам мы можем находить некие объекты в БД и отображать их на карте.
Каждый клиент — это пользователь карты. Когда юзер открывает карту, он подписывается на события, которые происходят с объектами в рамках полигона (в нашем случае — почти прямоугольника), описанного границами карты на экране клиента. Именно так — потому что клиента интересует ничтожно малая часть всех событий, ведь он просматривает очень малую часть глобальной карты. Если юзер меняет масштаб карты или двигает её, он отменяет старую подписку и создаёт новую: подписывается на события в рамках другого полигона на карте.
Проблема: в общем мы имеем столько же подписок, сколько клиентов у нас по всему миру. И ещё больше мы имеем событий, которые потенциально могут их интересовать. Публикую каждое событие, мы должны определять, кого из клиентов оно интересует и отправлять его только им. Так же мы заранее знаем, что среди всех клиентов релевантной будет только малая часть из них (ведь клиенты смотрят на карту по всему миру, а событие происходит только в конкретном месте карты).
На каждый чих перебирать все подписки линейным поиском можно даже не пытаться. Как быть?
P.S.: про подписки в MongoDB я знаю. Предположим, что мы не можем их использовать.