«Фреймворк для создания OLAP на триггерах»
1. может быть использован только создателем
2. совершенно бесполезен в конкурентной высоконагруженной системе
Чем вам обычный DDL не угодил, у вас так много таблиц, которые требуют агрегации и их число постоянно растет, чтобы разрабатывать для этого фреймворк? Даже в этом случае выгода сомнительно, поскольку предпоследний запрос в разы проще осмысления вызова 6-ти функций, для описания колонок. Сочувствую тому специалисту, который будет все это поддерживать после вас и будет вынужден использовать эти функции. Хотя думаю он свой велосипед напишет.
Метод сбора агрегированных данных через хранимую процедуру НЕ ПОДХОДИТ при большой активности базы данных. Т.к. при этом возникает много блокировок и из-за них тормозятся запросы на изменение данных. Данные могут меняться параллельными запросами для разных записей. Тут все нормально. Но при этом они будут менять одни и те-же данные в агрегационной таблице. И тут точно будут блокировки.
Конечно, но у меня идет массовая вставка с одной стороны и аналитика с другой. Сильно рассчитываю на версионность Postgress-а, а в дальнейшем вообще планирую разнести это на разные узлы
Массовая вставка в один поток? Если так — то это не страшно. Но если там параллельные запросы — обязательно наткнетесь на блокировки, которые будут эти вставки тормозить.
Приблизительно то-же самое будет делаться в приложении собирающем входные данные. Пока-что пишет одиночными insert-ами, параллельными сессиями. Кстати, мне не удалось обнаружить деградации производительности, вызванной триггерами, вплоть до 100 одновременных пишущих сессий. Масштабируется практически линейно.
Вам просто повезло. При наличии блокировки запрос, который на нее напарывается, делает паузу в 1 секунду (настройка по умолчанию postgresql). А при большой нагрузке одна секунда может легко превратиться в 10 (было в реальности) и т.д.
Вряд-ли везение здесь подходящее слово. Я все привык тестировать. Если это решение будет заметно просаживать производительность (в моей задаче), будем искать другое решение (например обновление снапшотов по расписанию). Но то что снапшоты понадобятся, совершенно очевидно.
Секционирование и «живые снимки» данных в PostgreSQL