Я думаю, вы обнаружите, что создание снимков состояния каждого пользователя каждый час - это не то, что хорошо масштабируется, независимо от того, какая у вас среда. Более обычная среда замаскирует это, позволяя вам дольше выполнять задачи, но вы все равно достигнете точки, когда нецелесообразно делать снимок данных каждого пользователя каждый час.
Мое предложение будет следующим: добавьте поле 'последний снимок' и создайте подкласс для функции put () вашей модели (при условии, что вы используете Python; то же самое возможно в Java, но я не знаю синтаксис ), так что всякий раз, когда вы обновляете запись, она проверяет, прошло ли больше часа с момента последнего снимка, и, если да, создает и записывает запись снимка.
Чтобы предотвратить одновременные обновления, создающие два идентичных снимка, вам нужно дать снимкам имя ключа, полученное из времени, когда был сделан снимок. Таким образом, если два одновременных обновления попытаются записать моментальный снимок, одно будет безвредно перезаписывать другое.
Чтобы получить снимок за данный час, просто запросите самый старый снимок, более новый, чем запрошенный период. В качестве дополнительного бонуса, поскольку неактивные записи не снимаются, вы также экономите много места.