Консолидация и повышение событий на основе вставок / обновлений базы данных? - PullRequest
2 голосов
/ 13 июня 2011

У нас есть неудачный случай, когда многие наши приложения обращаются напрямую к базе данных (в основном нативные приложения, наши управляемые приложения проходят через DAL). У нас более 300 таблиц, и нам нужно вызывать события на основе модификаций определенных таблиц. Эти события будут генерироваться через Enterprise Service Bus (nServiceBus) или MSMQ, и наши приложения будут подключаться к этим событиям.

Например:

  • Если есть вставка в таблице 1 и обновление в таблице 2, вызовите некоторые события.
  • Если есть обновление в таблице 1, удаление в таблице 2 и обновление в таблице 3, вызовите некоторые события.

В целом мы ожидаем, что не будет более 25 событий, и каждое событие не затронет не более 5 таблиц.

Информация:

  1. Мы выполняем много длительных задач, и нашим приложениям необходим опрос для завершения.
  2. У нас есть набор действительно старых приложений, которые общаются напрямую с базой данных, и изменение их для использования какого-либо DAL невозможно.
  3. Нам потребуется выполнить некоторую примитивную фильтрацию событий, чтобы некоторые события только проверялись и не генерировались.
  4. Мы используем SQL Server 2008 R, но не можем иметь корпоративные лицензии на всех наших установочных площадках.

Мы ищем CDC-подобное решение, к которому мы можем подключиться. Указатели на возможные решения или вклад / опыт были бы очень полезны:)

1 Ответ

0 голосов
/ 13 июня 2011

Я предпочитаю избегать этого и избегал этого пару раз.

Мой план резервного копирования (т.е. разработал эскиз, но никогда не выполнялся) был:

  • Использование триггеров для подачи сообщений в очередь
  • Используйте Service Broker для чтения этих сообщений
  • В брокере служб используйте сборку .NET для вызова службы WCF (или, возможно, для отправки сообщения в MSMQ).

Использование очереди и компонента Service Broker означает, что триггерам не требуется какая-либо значительная обработка и удержание клиентов.

...