У нас есть требование для уведомления внешних систем об изменениях данных в различных таблицах в базе данных SQL Server. Выбор данных для мониторинга несколько под контролем пользователя (выбирает из списка того, что мы поддерживаем). Получатели уведомлений могут быть в локальной сети (т. Е. В одном центре данных), или они могут быть удалены.Обнаружение изменения данных в режиме реального времени в SQL Server
В настоящее время мы обрабатываем это кодом приложения на нашем уровне доступа к данным, который обнаруживает уведомления об изменениях и очередях в очереди Service Broker, которая контролируется службой Windows, которая выполняет фактическое уведомление. Не совсем в режиме реального времени, но достаточно близко.
У этого есть определенные проблемы с обслуживанием, поэтому мы рассматриваем использование одного из механизмов обнаружения изменений, встроенных в SQL Server. К сожалению, ни один из тех, что я смотрел на (я не думаю, что я смотрел на них все), кажется, очень хорошо подходят:
Change Data Capture и отслеживания изменений: Основная проблема заключается в том, что они требуют опроса собранной информации для определения изменений которые должны быть переданы получателям. Я подозреваю, что это принесет слишком много накладных расходов.
Услуги по уведомлению: По сути использует SQL Server как веб-сервер, что является ужасной тратой лицензий. Он также требует доступа через, по меньшей мере, два брандмауэра в сети, что неприемлемо с точки зрения безопасности.
Уведомление о запросе: Кажется, наиболее вероятным кандидатом, но, похоже, не очень удобно использовать динамические элементы данных для наблюдения. Необходимость повторной регистрации запроса после каждого уведомления отправленные означает, что мы будем держать SQL Server заняты с управлением регистрациями
уведомлением о событиях: Предназначена для уведомления на уровне база данных или экземпляра события, на самом деле не применимых к изменению данных обнаружение.
О лучшей идее, которую я придумал, является использование CDC и установка триггеров вставок в таблицы данных изменений. Триггеры помещают очередь в очередь Service Broker, которая будет обрабатываться каким-либо другим кодом для выполнения уведомлений. Это по существу то, что мы делаем сейчас, за исключением использования функции SQL Server для обнаружения изменений. Я даже не уверен, что вы можете добавить триггеры к этим таблицам, но я думал, что получаю обратную связь, прежде чем тратить много времени на POC.
Это похоже на ужасный окольный путь, чтобы выполнить свою работу. Есть ли что-то, что я пропустил, что облегчит работу или я неверно истолковал одну из этих функций?
Спасибо, и я прошу прощения за длину этого вопроса.
Какие проблемы вы видите с Service Broker? Я бы предложил другое ... –
Мы не особенно видим проблемы с Service Broker. Дело в том, как сделать обнаружение изменений более чистым, более универсальным способом. –