Является ли уведомление об изменении базы данных лучше, чем триггер?

1

Я разрабатываю приложение, используя базу данных Oracle и службу WCF/WebAPI. Служба должна знать об изменении определенной таблицы в базе данных. Я занимался серфингом в Интернете и нашел технологию в Oracle RDBMS с именем "Уведомление об изменении базы данных", которое, я думаю, действительно то, что мне нужно в такой ситуации. Но моя команда вела меня использовать триггер для этой цели.

Может ли кто-нибудь объяснить преимущества и недостатки каждой технологии для уведомления службы о изменениях таблицы?

Я хочу отслеживать операции insert, update, delete в таблице, способ, которым я планирую уведомлять службу, - использовать пакет UTL_HTTP для вызова методов службы.

Заранее спасибо!


Обновление: уведомления должны быть отправлены как можно скорее. Таким образом, любые способы, которые работают периодически (например, помещать оповещения в очередь и обрабатывать их с помощью задания oracle каждые 1 минуту), не подходят.

Теги:
asp.net-web-api
wcf

2 ответа

1

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

Однако Уведомление об изменении базы данных тоже будет работать. Вы отметили свой вопрос C#. Если вы используете ODP, вам обязательно стоит подумать о возможности использования встроенной поддержки. Узнайте больше.

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

1

Триггеры базы данных подходят для сложных значений по умолчанию или для комплексной проверки данных. Не используйте их для логики приложения, например, для отправки сообщений. Когда будут проблемы с http-соединением, вы не сможете изменить свои данные. В любом случае, вы можете создать очередь уведомлений (используя, например, новую таблицу или Oracle Queue) и заполнить ее с помощью триггеров, которые могут быть безопасными. Затем напишите задание, которое будет запрашивать эту очередь и отправлять уведомления.

Когда вы смотрите концепцию уведомления об изменении базы данных (см. Http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_dcn.htm#BGBDBAIJ, рисунок 13.2), вы видите, что он использует тот же подход,

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

  • 0
    Спасибо за ваш ответ! Я забыл упомянуть, что сервис должен получать уведомления из базы данных как можно скорее. Поэтому я ожидаю, что ваш подход с использованием очереди уведомлений с заданием (как я ожидаю, это периодическое издание) не соответствует таким потребностям?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню