и ограничения количества каких-то действий юзера. Задача така: есть куча юзеров, есть разные действия (фичи), которые эти юзерам доступны (например загружать файлы, отсылать сообщения, создавать связи). Есть разные тарифы, в зависимости от которых юзерам даётся разное количество этих фичей.
Как бы это красиво реализовать с учётом, что юзеров и событий очень много. Т.е. счетчики должны тикать постоянно. Ну и понятное дело, что мы не можем например при отправке сообщения пересчитывать сколько он уже отправил, чтобы понять может ли он это сделать.
Были бы не большие объемы, я бы не задумываясь сделал табличку типа feature_id, user_id, feature_value (где первые два поля — PK) и объект с методами типа incValue($count = 1), getValue() и isLimitReached() ну и по incValue делать в мускул чота типа insert into features_counters (...) on duplicate key update feature_value = feature_value + $count а isLimitReached() - сравнивало бы лимит с текущем getValue()
Так вот дело в том, что событий в системе много. и тогда update в mysql будут лететь часто и густо
Боюсь проблем с производительностью.
Как бы сделать красиво и чтобы работало точно и быстро (с минимальным шансом допустить сделать 1001 сущность при лимите в 1000, например)
На борту уже есть редис, первая идея конечно хранить вообще всё там, а в mysql переодически сгружать.
Но может есть более лучшие способы, вот это всё?
или любая другая timeline БД, вам в любом случае метрики будет надо куда то складывать, так что, скорее всего это решение проблемы.
Обсуждают сегодня