Денормализация, взвешенные агрегаты для обновленных таблиц в MySQL - PullRequest
1 голос
/ 12 июля 2010

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

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

Локальная база данных используется для статистического анализа. Таким образом, я нормализую (в основном агрегирую) данные локально для использования со статистическими программными пакетами. До сих пор я использовал хранимые процедуры, потому что я чувствовал, что с ними легче обращаться (и они более четко расположены), когда в игру вступают схемы взвешивания (в основном другие таблицы, содержащие веса, умноженные на переменные).

Хотя недостаток хранимых процедур заключается в том, что я снова запускаю их, когда таблицы заполняются новыми данными. Очевидно, я не администратор базы данных ... Так что не стесняйтесь указывать очевидное :) Каков наилучший подход к сценарию такого рода? ИП или взгляды? Или что-то совершенно другое?

спасибо за любые предложения заранее!

1 Ответ

1 голос
/ 12 июля 2010

Это зависит (это общий ответ на любые «общие» вопросы, не так ли? :)).Вам нужно оценить компромиссы, чтобы увидеть, что лучшее решение для ваших нужд.

Представления в основном просто переписывают запросы (в MySQL), поэтому использование представления будет выполнять агрегацию / денормализацию при каждом запуске запроса.Это может сделать ваши запросы медленнее, чем вы хотели бы.Кроме того, если ваши процедуры действительно сложны, возможно, нецелесообразно пытаться поместить эту логику в представление.

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

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

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

Здесь - это ссылка на документацию для хранимых процедур, представлений, триггеров и событий.

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