be_a_dancer
@be_a_dancer
Backend/Fullstack Developer

Каким образом лучше сформировать связь в таблице?

Добрый вечер.

Возникла весьма интересная и серьезная проблема, по большей части касающаяся оптимизации. Понятия не имею, каким образом правильнее всего реализовать данную систему.

Коротко по обязательному: в тз прописана необходимость создания системы, которая вполне оптимизирована для нагрузки до 5 000 RPS и до 1 000 000 пользователей.

А теперь суть проблемы. Существует три сущности: пользователь, подписка и скидка. У пользователя может быть активны несколько подписок (стандартная связь многие-ко-многим), но при этом каждая подписка имеет огромное количество скидок (в среднем, от 400 до 1800).
Основная проблема: пользователь активирует подписку, при этом тратит он не подписки, а скидки (их можно задействовать ограниченное число раз). Самое узкое место: необходимо отображать количество оставшихся скидок по всем подпискам.

Мои варианты решения, коих всего два. Первый - мы создаем связь один ко многим для пользователя и подписки, а скидки тратим еще в одной связи: скажем, пользователь - скидка. В таком случае операция извлечения данных для отображения оставшихся подписок будет очень дорогостоящей по ресурсам.
Второй вариант - при создании подписки мы можем в таблицу пользователь-скидка выкатить все скидки, которые есть в подписке. В этом случае, самой дорогостоящей получится операция создания пользователя (запись 1800 значений в базу одномоментно для одного пользователя - боль) и мягкого удаления подписки (деактивации).

Вопрос: каким образом оптимальнее всего сделать подобную систему? Буду благодарен за любой ответ!
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 2
@oxidmod
Храните счетчике в редисе =)
Ответ написан
rim89
@rim89
программист-велосипедист
таблица скидок минус таблица трат скидок ну и кэшировать это где то, чтобы каждый раз не запрашивать расчет
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
ad.ru Новосибирск
от 100 000 до 150 000 ₽
от 1 000 до 4 000 $
23 янв. 2021, в 14:40
3000 руб./за проект
23 янв. 2021, в 14:06
500 руб./за проект