Плюсы и минусы триггеров базы данных против обратных вызовов Rails ActiveRecord? - PullRequest
11 голосов
/ 08 сентября 2011

Я пишу программу с использованием Ruby on Rails и PostgreSQL. Система генерирует множество отчетов, которые часто обновляются и часто используются пользователями. Я разрываюсь между тем, должен ли я использовать триггеры Postgres для создания таблиц отчета (например, материализованные представления Oracle) или Rails, встроенные в обратные вызовы ActiveRecord. У кого-нибудь есть мысли или опыт по этому поводу?

Ответы [ 2 ]

16 голосов
/ 08 сентября 2011

Обратный вызов полезен в следующих случаях:

  • Объединение всей бизнес-логики в моделях Rails, что облегчает обслуживание.
  • Использование существующего кода модели Rails
  • Легко отлаживать
  • Код на Ruby легче писать / читать, чем sql «ремонтопригодность»

Триггеры полезны в следующих случаях:

  • Производительностьэто большая проблема.Это быстрее, чем обратные вызовы.

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

7 голосов
/ 15 января 2016

У нас была та же проблема, и, поскольку это интересная тема, я разработаю ее на основе нашего выбора / опыта.

Я думаю, что концепция более сложная, чем то, что было подчеркнуто в текущем ответе.

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

Во-первых,идея «легко отладить» не является [обязательно] верной.В нашем случае это на самом деле контрпродуктивно.

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

Триггеры не обязательно должны быть спроектированы как «сложная и быстрая» логика.В частности, триггеры также могут работать как низкоуровневая логика обратного вызова, поэтому они являются простыми и экономичными: они просто перенаправляют события обновления обратно в код rails.

Чтобы завершить в упомянутом случае использования обратные вызовы railsследует избегать, как чумы.

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

(Поскольку этот пост старый, мне любопытно, какой опыт был у ОП)

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