Django накапливает данные перед сохранением в БД
На моем сайте django мне нужен трекер, который измеряет, как долго пользователь выполнял определенную активность каждый день. Для этого браузер посылает ajax запрос на сервер каждые 30 секунд, пока пользователь выполняет свою активность. Получив этот запрос, сервер увеличивает счетчик активности пользователя на 30 секунд. Эти счетчики хранятся в базе данных.
Я подумал, что будет довольно неэффективно обновлять данные в базе данных каждые 30 секунд для каждого пользователя сайта. Поэтому моя идея заключалась в том, чтобы накапливать все отслеженное время в глобальном словаре {user_id: seconds}. Таким образом, при получении ajax запроса на активность я мог бы просто найти идентификатор пользователя в словаре и увеличить соответствующее значение секунд. Затем этот словарь можно было бы сбрасывать в базу данных каждые 10 минут.
Я понимаю, что эта схема не является супер возобновляемой, и если сервер упадет, я потеряю последние 10 минут активности для всех пользователей, и меня это устраивает.
Что меня беспокоит:
As far as I understand, django running with gunicorn can have many worker processes, so I won't be able to have a global dictionary. I can't be even sure that the same user will always by handled by the same process.
I'd like to flush the dictionary to the database when the worker process is about to be stopped, which doesn't seem to be a trivial task.
Две вышеуказанные проблемы и отсутствие очевидного решения выглядят как намек на то, что я делаю что-то не так. Может быть, я слишком оптимизирую вещи, и это нормально сохранять в базу данных каждые 30 секунд для каждого пользователя, или, может быть, существует лучшая общеизвестная практика кэширования материала в памяти перед отправкой в базу данных, которую я упускаю?
Мог бы кто-нибудь направить меня в правильном направлении, пожалуйста?