Как эффективно вычислить новых/ушедших пользователей группы Вконтакте?
Мне необходимо иметь актуальные данные по новым и ушедшим пользователями из группы Вк. Работать буду с большим количеством групп.
Изначально я получаю id всех участников группы Вк и сохраняю в их БД отдельными записями в таблицу group_members c полями group_id, user_id.
Периодически я заново опрашиваю Вк, чтобы обновить информацию о пользователях. Проверять все id по одному - неэффективно. Я думаю о том, что можно сравнивать массив id с тем, что есть в БД, чтобы сначала найти тех, кого в БД нет (новые), а потом тех, кого нет в ответе ВК (ушедшие). Как лучше это сделать?
Т.к. люди постоянно приходят/уходят, то в массивах будут большие отклонения. Нужно ли их где-то хранить, если, например, имеем дело с группой с 10млн участников? Redis?
Как наиболее эффективно все это сделать?
Использую PostgreSQL, Ruby on Rails.
UPDATE
У вк есть метод execute, так что можно получать 25000 участников за раз. Сallback API, к сожалению, подключается только к моим сообществом, а я хочу мониторить конкурентов. Я понимаю, что надо будет купить прокси IP для быстроты.
Советую вам кардинально пересмотреть вашу систему учета пользователей. Получать пользователей на момент подключения группы также как и сейчас. А учет вести через Callback API, где подписаться на подписку\отписку от сообщества. Вам тогда не нужно будет периодически получать пользователей и сравнивать расхождения массивов. Вы будете получать конкретного пользователя в конкретный момент и узнавать отписался он или нет. Это упростит логику, даст точное время подписки\отписки, но тем самым сделает большую нагрузку на сервер, так как после каждого действия пользователя будет идти запрос на сервер.
да, callback это гораздо лучше, но с нагрузкой спорно, представьте сколько запросов надо сделать чтобы обойти 10 млн подписчиков, и это еще не учитывая, что пока он обходит, кто то в начале этого пула мог отписаться)
Павел Громадчук: с параллельностью все не сложно. токены можно давать разным приложениям, разным пользователям и тд. ip купить для разных приложений, например. у Вк ограничение на запрос - 3 в сек. и они будут банить за большое кол-во похожих запросов. соответственно, проблема в Вк, а не в моем сервере, т.к. я легко буду генерировать более 3 запросов в сек. Но в данном случае, меня беспокоит то, как я буду на сервере обрабатывать эти массивы, чтобы минимизировать запросы к БД.