Arhn - архитектура программирования

Как это оптимизировать: многие триггеры Postgres вызывают одну и ту же функцию внутри транзакции

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

Каждая из этих таблиц вызывает одну и ту же функцию через триггер: updateCachedField(basetable_id INTEGER). Функция updateCachedField запрашивает все эти другие таблицы и вычисляет новое кэшированное значение для базовой таблицы. Функция updateCachedField сложна и требует больших затрат.

Во время одной транзакции многие таблицы, влияющие на кэшированное поле, могут быть изменены. Таким образом, во время одной транзакции функция updateCachedField может быть вызвана 50 раз... но только с 5 различными basetable_id.

Есть ли способ оптимизировать это так, чтобы функция updateCachedField вызывалась только 5 раз вместо 50+?

15.02.2013


Ответы:


1

Я думаю, что ваш лучший вариант - использовать отложенный триггер ограничения и запрос на основе значения xmin или другой информации. На самом деле вы также можете скопировать данные «журнала» для моментального снимка в другое место.

Без четкой информации не совсем понятно, на что вы смотрите, но один из вариантов - по существу иметь три набора таблиц:

  1. Живые столы. Обновления (дельты или другая полезная совокупная информация) записываются в таблицы журналов при обновлении или вставке.

  2. Таблицы журналов. Это только добавление.

  3. Объединение таблиц моментальных снимков, которые периодически объединяют новые наборы таблиц журналов.

Затем у вас может быть просмотр в реальном времени, который будет отображать текущие агрегированные данные, агрегированные только из последнего снимка.

27.04.2013
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..