Ускорение агрегации
От: Буравчик Россия  
Дата: 15.12.18 08:44
Оценка:
Есть склад, на него приходит товары, с него уходят товары. Храним в базе: момент времени, товар, количество расхода/прихода.

Нужно быстро получать количество товара на любой момент времени. Чтобы посчитать количество нужно "сложить" все движения (нарастающим) до этого момента времени. Имеется запрос, который суммирует движения, но работает долго, т.к. приходится суммировать все записи о движении (записей очень-очень много).

Для ускорения можно (нужно?) хранить промежуточные результаты (например, на конец месяцы/недели/дня и т.п.). Но...
Во-первых эти промежуточные результаты нужно обновлять при каждом приходе/расходе.
Во-вторых, движение товаров может быть введено задним числом. Придется пересчитывать промежуточные итоги сразу за несколько периодов (тоже долго).

Вроде, задача достаточно типовая. Например, в 1С решается с помощью "регистров накоплений" — структуры, созданной специально для этого.

Как обычно решаются такие задачи?
Существует ли поддержка со стороны БД?
Существуют ли библиотеки, которые реализуют такое "промежуточные" результаты? (любой язык)
Best regards, Буравчик
Отредактировано 15.12.2018 10:25 Буравчик . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.