Мой быстрый ответ - хранить все в базе данных. Стоимость хранения намного ниже, чем стоимость обработки , если говорить об очень масштабных приложениях. В небольших приложениях данных будет гораздо меньше, поэтому хранилище все равно будет подходящим решением.
Большинство СУБД чрезвычайно хороши в обработке огромных объемов данных, поэтому, когда существуют миллионы / триллионы записей, данные все равно можно извлечь сравнительно быстро, чего нельзя сказать об обработке данных вручную каждый раз.
Если вы решите вычислять данные, а не хранить их, время обработки не будет увеличиваться с той же скоростью, что и размер данных - чем больше данных, тем больше пользователей. Как правило, это означает, что время обработки умножается на размер данных и количество пользователей.
processing_time = data_size * num_users
Чтобы ответить на ваш другой вопрос, я думаю, что было бы лучше ввести «снимок» определенного момента только тогда, когда данные достигают такого высокого значения, что время обработки будет значительным .
При расчете больших сумм, таких как банковские балансы, было бы целесообразно сохранить результаты любых тяжелых вычислений вместе с их отметкой даты в базе данных. Это будет просто означать, что им не нужно будет снова производить вычисления, пока они не устареют.