Size: a a a

2021 June 08

AE

Alexandr Emelyanov in #UWDC2021
ой вей, помню были популярны gulp, grunt, bower

вот последний я обожал просто
источник

AE

Alexandr Emelyanov in #UWDC2021
потом пришел вебпак
источник

AE

Alexandr Emelyanov in #UWDC2021
>вот последний я обожал просто

ой, я про brunch конечно же
источник

КН

Котяй Негодяй... in #UWDC2021
Как бы вы реализовали реалтайм гео-сервис? Есть система координат и СУБД, которая умеет в geospatial индексы: по этим индексам мы можем находить некие объекты в БД и отображать их на карте.

Каждый клиент — это пользователь карты. Когда юзер открывает карту, он подписывается на события, которые происходят с объектами в рамках полигона (в нашем случае — почти прямоугольника), описанного границами карты на экране клиента. Именно так — потому что клиента интересует ничтожно малая часть всех событий, ведь он просматривает очень малую часть глобальной карты. Если юзер меняет масштаб карты или двигает её, он отменяет старую подписку и создаёт новую: подписывается на события в рамках другого полигона на карте.

Проблема: в общем мы имеем столько же подписок, сколько клиентов у нас по всему миру. И ещё больше мы имеем событий, которые потенциально могут их интересовать. Публикую каждое событие, мы должны определять, кого из клиентов оно интересует и отправлять его только им. Так же мы заранее знаем, что среди всех клиентов релевантной будет только малая часть из них (ведь клиенты смотрят на карту по всему миру, а событие происходит только в конкретном месте карты).

На каждый чих перебирать все подписки линейным поиском можно даже не пытаться. Как быть?

P.S.: про подписки в MongoDB я знаю. Предположим, что мы не можем их использовать.
источник

АВ

Алексей Волков... in #UWDC2021
Перебирать только часть, сделав в момент сохранения сегментацию и перебирая только тех, кто попал в сегмент. Как вариант
источник

КН

Котяй Негодяй... in #UWDC2021
Типа заранее напилить глобальную карту на полигоны, таким образом кластеризовав?
источник

АВ

Алексей Волков... in #UWDC2021
да, есть даже специальная штука для такого в картографии — S2 полигоны вроде бы называется.
вот что нашел из примеров:
https://s2.sidewalklabs.com/regioncoverer/?center=40.724918%2C-73.997199&zoom=17&cells=89c25985%2C89c259864%2C89c259869%2C89c25988c%2C89c259894%2C89c2598bd%2C89c2598bf%2C89c2598c4%2C89c2598dd5%2C89c2598f
источник

КН

Котяй Негодяй... in #UWDC2021
Я вообще подозреваю, что подписки можно упорядочить.
источник

АВ

Алексей Волков... in #UWDC2021
возможно, да
источник

КН

Котяй Негодяй... in #UWDC2021
Но хотя бинарный поиск существенно не улучшит ситуацию. Всё равно оверхед слишком велик.
источник

КН

Котяй Негодяй... in #UWDC2021
Спасибо, гляну.
источник

КН

Котяй Негодяй... in #UWDC2021
Хм. А можно ведь саму подписку сохранять в БД с координатами и geospatial индексом, а запросом выбирать те полигоны,куда входит искомая точка. Но такой запрос будет посылаться после каждого события.
источник

S

Slach in #UWDC2021
ну вам в любом случае надо пересечение радиуса подписок и координаты события искать...

куда нибудь в PostGIS засуньте координаты "подписчиков" с соответсвующим индексом
и через SELECT по координатам в момент отправки события выбирайте...
источник

КН

Котяй Негодяй... in #UWDC2021
О, а такое ведь и в редиске можно сделать.
источник

КН

Котяй Негодяй... in #UWDC2021
источник

S

Slach in #UWDC2021
ну тут главное чтобы это все в память влазило...
источник

ВИ

Вадим Исаканов... in #UWDC2021
А теория графов не подходит для решения таких задач?
И graph-oriented базы
источник

ВИ

Вадим Исаканов... in #UWDC2021
Единственное, я смотрю на список графовых БД, и не вижу сколько-нибудь известных опенсорсных баз https://en.wikipedia.org/wiki/Graph_database
источник

S

Slach in #UWDC2021
нет =) графы это для поиска маршрута и анализа связей между объектами

это конкретно геопространственный поиск и все...
источник

ВИ

Вадим Исаканов... in #UWDC2021
понял
источник