2016-09-07 3 views
0

У меня есть задача, в которой я контролирую базу данных, но не приложение, которое выполняет операции CRUD в базе данных SQL Server 2008 R2.Лучший способ получить оповещение вскоре после ввода данных в таблицу SQL Server

В идеале, я хотел бы позвонить (POST) веб-API (обратите внимание, что мне не нужно ждать ответа API) вскоре после операции вставки в таблице данных.

вещи на мой взгляд, для достижения этой цели

  1. Создание триггера SQL Server на таблице данных (включен CLR, но это SQL Server 2008R2 так он использует .Net 2.0).

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

  2. Служебный брокер и предупреждение о введении в эксплуатацию ---> Это хорошо работает, но я беспокоюсь о параллелизме.

  3. Традиционный опрос

Вопросы: Если я иду с первым раствором, делает триггер выполняются в том же объеме сделки как операции вставки? Если веб-API отключен, будет ли он задерживать операцию вставки? Поддерживает ли этот метод параллелизм?

Есть ли какой-либо другой метод, который вы бы порекомендовали? (Пожалуйста, укажите плюсы и минусы в качестве части решения)

+0

Как скоро «скоро»? – Solarflare

+0

Хорошо. Я должен был использовать «в реальном времени» вместо «скоро» – Jayee

+0

Я не знаю много о третьем. Что касается 1-го и 2-го, я думаю, вы должны сделать как для защитного подхода: создание триггера SQL защищает ваш уровень персистентности; сервисный брокер и инъекция зависимостей обеспечивают уровень вашего веб-приложения. 1 - задача для администратора баз данных, а 2 - для инженеров-программистов. Оба хороши иметь.Обратите внимание, что вы не должны создавать хранимую процедуру (SP), а TRIGGER, которая выполняется сразу после операции _INSERT_ с помощью SQL Server. Эта проверка триггера (ов) включена в ту же транзакцию. Если возникнет какая-либо ошибка, транзакция будет отменена. –

ответ

1

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

Мой подход был бы:

  1. есть триггер, который очень худой, и только делает INSERT в отдельную таблицу (а «команда» таблицы или все, что вы могли бы назвать его). Эта таблица должна содержать всю необходимую релевантную информацию для уведомления.

  2. имеет отдельный запланированный процесс - либо запланированное задание SQL Server, либо внешнее приложение на сервере, которое регулярно проверяет эту таблицу - каждый минут, каждые 15 минут - все, что вам нужно - и если есть новая запись в таблице «команды», он делает то, что ему нужно делать, и рассылает уведомления или звонки внешних WebAPI услуг и т.д.

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

+0

Спасибо за ваше предложение. – Jayee

 Смежные вопросы

  • Нет связанных вопросов^_^