Re: Ускорение агрегации
От: MadHuman Россия  
Дата: 15.12.18 10:41
Оценка: 9 (2) +1 -1
Здравствуйте, Буравчик, Вы писали:


Б>Для ускорения можно (нужно?) хранить промежуточные результаты (например, на конец месяцы/недели/дня и т.п.). Но...

да, нужно иметь промежуточные предрассчитанные результаты, других вариантов нет.
остатки на произвольную дату считаются так — берется ближайший предрассчитанный итог и по документам от него до нужного момента считаются обороты и результаты агрегируются.
при грамотном подборе периода хранения предрасчитанных итогов, посчитать обороты в интервале обычно довольно быстро.


Б>Во-первых эти промежуточные результаты нужно обновлять при каждом приходе/расходе.

да, но не все. приход/расход обычно вводятся в последний период, а для оперативного учета даже почти в реалтайме, это значит что
при вводе текущих операций обновлять ничего не надо, кроме предрасчитанных текущих остатков, но опять же по единичным позициям это быстро.


Б>Во-вторых, движение товаров может быть введено задним числом. Придется пересчитывать промежуточные итоги сразу за несколько периодов (тоже долго).

может, но это существенно реже чем ввод оперативных данных.
и пересчет идет обычно относительно небольшого количества конкретных позиций, что также ускоряет процесс до приемлемых времен.


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

по сути и это и есть предрассчитанные остатки/итоги.


Б>Как обычно решаются такие задачи?

Б>Существует ли поддержка со стороны БД?
в БД есть материализованные вью, возможно их можно использовать для поддержки актуальности промежуточных итогов.
конкретно их не использовал, у нас с уровня приложения производился пересчет при корректировках задним числом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.