2015-07-13 6 views
5

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

В настоящее время мы обрабатываем это кодом приложения на нашем уровне доступа к данным, который обнаруживает уведомления об изменениях и очередях в очереди Service Broker, которая контролируется службой Windows, которая выполняет фактическое уведомление. Не совсем в режиме реального времени, но достаточно близко.

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

Change Data Capture и отслеживания изменений: Основная проблема заключается в том, что они требуют опроса собранной информации для определения изменений которые должны быть переданы получателям. Я подозреваю, что это принесет слишком много накладных расходов.

Услуги по уведомлению: По сути использует SQL Server как веб-сервер, что является ужасной тратой лицензий. Он также требует доступа через, по меньшей мере, два брандмауэра в сети, что неприемлемо с точки зрения безопасности.

Уведомление о запросе: Кажется, наиболее вероятным кандидатом, но, похоже, не очень удобно использовать динамические элементы данных для наблюдения. Необходимость повторной регистрации запроса после каждого уведомления отправленные означает, что мы будем держать SQL Server заняты с управлением регистрациями

уведомлением о событиях: Предназначена для уведомления на уровне база данных или экземпляра события, на самом деле не применимых к изменению данных обнаружение.

О лучшей идее, которую я придумал, является использование CDC и установка триггеров вставок в таблицы данных изменений. Триггеры помещают очередь в очередь Service Broker, которая будет обрабатываться каким-либо другим кодом для выполнения уведомлений. Это по существу то, что мы делаем сейчас, за исключением использования функции SQL Server для обнаружения изменений. Я даже не уверен, что вы можете добавить триггеры к этим таблицам, но я думал, что получаю обратную связь, прежде чем тратить много времени на POC.

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

Спасибо, и я прошу прощения за длину этого вопроса.

+0

Какие проблемы вы видите с Service Broker? Я бы предложил другое ... –

+0

Мы не особенно видим проблемы с Service Broker. Дело в том, как сделать обнаружение изменений более чистым, более универсальным способом. –

ответ

0

Почему вы не используете триггеры обновления и вставки? Триггер может выполнить clr-код, который объясняется enter link description here

+0

Я их рассмотрел, и они могут оказаться лучшим решением. Вероятно, они приемлемы, потому что они не будут изменять какие-либо данные - просто помещая что-то в очередь Service Broker или что-то подобное. Я надеялся, что одна из других функций либо предоставит какое-то существенное преимущество, либо, по крайней мере, избежит обсуждения «почему вы используете триггеры». –

+0

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