Ведение производных данных в MySQL: триггеры против периодической работы - PullRequest
0 голосов
/ 09 ноября 2011

«Программирование хранимых процедур MySQL» Гая Харрисона в главе «Триггеры» говорит, что триггеры - это путь к ведению сводной таблицы.

Сводная таблица в приведенном здесь примере представляет собой таблицу, в которой хранится общая стоимость продаж для клиента.Эти данные получены из таблицы «Продажи», которая записывает отдельные транзакции.В этом примере используются триггеры BEFORE INSERT, BEFORE UPDATE и BEFORE DELETE в таблице «sales» для синхронизации таблицы customer_sales_totals.Триггер BEFORE INSERT выполняет выбор таблицы 'customer_sales_totals' и вставляет туда строку или обновляет существующую.

Теперь давайте предположим, что:

  • каждый день в таблицу 'продаж' вставляются десятки / сотни тысяч записей;
  • достаточно, если'customer_sales_totals' никогда не устареет более чем на несколько минут;
  • существует много продаж для каждого клиента (количество продаж намного больше, чем количество клиентов).

В этом случае периодическое задание с низким приоритетом, а не триггеры, было бы более эффективным способом поддержания 'customer_sales_totals'?

Спасибо Tymek

1 Ответ

0 голосов
/ 09 ноября 2011

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

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