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

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

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

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

Какие подходы, алгоритмы сортировки и тип базы данных использовать для оптимизации вычислений?
  • Вопрос задан
  • 437 просмотров
Пригласить эксперта
Ответы на вопрос 4
@bacon
Пишите решение "в лоб", делаете нагрузочное тестирование, по нему определяете узкое место, оптимизируете его. И так повторять кучу раз.
Ответ написан
@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
...а ну-ка пыль сдуй отсюда...
Миллион тегов
Каждый пользователь может подписаться на любую группу из тегов

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

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

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

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

Войти через центр авторизации
Похожие вопросы