Кэширование результата vs постоянный пересчёт того же самого?
Сервер отдаёт клиентам какие-то данные. К примеру, отчёт о статистике магазина за сутки. Он содержит строки с суммами покупок, включая все налоги и прочее и последняя строка это сумма по всем категориям (требуется суммировать много всего и множество строк). Суммарный налог за все товары, суммарная сумма покупок и т.п. То есть при каждом запросе на сервер нужно давать эти данные всем кто попросит. Как лучше это организовать - каждый раз пересчитывать сумму по новой для каждого запроса, или хранить поле "сумма" в БД и при добавлении новой покупки увеличивать его?
P.S. Если постоянно считать то же самое, теоретически, процесс будет работать впустую. Зачем бесконечно раз пересчитывать одно и тоже, когда можно просто хранить результат и обновлять его по мере прихода новых строк в таблицу?
FreeBa, vaut А если мне проще инкрементить поле суммы в БД, чем писать сложный алгоритм по суммированию, поиску и сбору цен в подмассивах и поддокументах, если речь о Mongo?
Urukhayy, у заказа еще зачастую есть статус
Допустим это открытый/завершенный/отмененный.
Что будет с вашим полем, если менеджер будет менять непредсказуемое количество раз статус заказа в разных направлениях? Задание с плюсом: он при этом убавляет или добавляет продукты, что меняет сумму заказа. И это реальный кейс, с которым мне доводилось сталкиваться.
При разрастании продукта рано или поздно кто-то добавит новый статус и забудет для него добавить работу с вашим кешем.
Одно из решений - вычислять значение и кешировать на 5-10 минут, для многих магазинов этого будет достаточно. Минус решения подсчет может потреблять много ресурсов в зависимости от организации данных и быть даже дольше чем 5-10 минут.