@IceDevil
На пути от верстки до фронта

Задачка на сообразительность, как решить?

Дано:
Миллион тегов
Миллион пользователей
Каждый пользователь может выбрать несколько любых тегов, тем создав из них уникальную группу и подписаться на эту группу

Задача:
Когда создается контент например с n тегами, надо найти все группы которые можно скомбинировать из этих n тегов в количестве от 2х до n соответсвенно, и отобрать всех пользователей у которых совпали группы

Какие подходы, алгоритмы сортировки и тип базы данных использовать для оптимизации вычислений?
  • Вопрос задан
  • 443 просмотра
Пригласить эксперта
Ответы на вопрос 3
@WaterSmith
Android-разработчик. Java, Kotlin
При сохранении настроек пользователя, хешируем группу тегов на которую он подписался и сохраняем хеш. При добавлении контента с группой тегов, так же вычисляем хеш, и ищем всех подписчиков с таким же хешем.

update:
Кажется я понял.
Создаете таблицу подписок (subscribers) вида: user, tag
Далее, делаете выборку из этой таблицы, примерно так:
SELECT user, count(tag) as tagcounter
FROM subscribers 
WHERE tag IN (%taglist)
GROUP BY user
HAVING tagcounter>1

где %taglist - список тегов статьи
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
Миллион тегов
Каждый пользователь может подписаться на любую группу из тегов

в IRL такого не будет

Миллион пользователей

да и такого может не быть, если не боты
Ответ написан
inoise
@inoise
Solution Architect, AWS Certified, Serverless
На ютубе столько прекрасных разборов таких архитектур, вы бы знали. Если коротко то только быть отдельный сервис подписок. Он слушает события из системы через Event Bus и у себя генерирует списки и уведомления. В общем, тут замешаны очереди и множественные подписчики для параллельной обработки
Ответ написан
Ваш ответ на вопрос

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

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