У меня есть таблица с большой нагрузкой (многие вставки/обновления/удаления) в базе данных SQL2005. Я бы хотел сделать некоторую пост-обработку для всех этих изменений как можно ближе к реальному времени (асинхронно, чтобы не заблокировать таблицу каким-либо образом). Я просмотрел ряд возможных решений, но просто не могу найти подходящее решение, которое кажется правильным.
Тип почтовой обработки также довольно тяжелый, так что служба прослушивателя окон фактически передаст обработку на несколько машин. Однако эта часть приложения уже запущена, полностью асинхронна, а не нужна мне помощь. Я просто хотел упомянуть об этом просто потому, что это повлияло на конструктивное решение, поскольку мы не могли просто загрузить некоторый объект CLR в DB для завершения обработки.
Итак, простая проблема остается: изменения данных в таблице, я хочу сделать некоторую обработку в коде С# на удаленном сервере.
В настоящее время мы придумали использование SQL-триггера, который выполняет "xp_cmdshell", чтобы использовать exe, который вызывает событие, которое слушает служба Windows. Это просто плохо.
Однако другие решения, которые я просматривал в Интернете, также выглядят слишком запутанными. Например, настройка SQLCacheDependancy также требует установки Service broker. Другим возможным решением является использование триггера CLR, который может вызвать веб-сервис, но в этом так много предупреждений в Интернете о том, что это плохой способ сделать это, особенно когда производительность критическая.
В идеале мы не будем отвлекаться на изменения таблицы, но скорее перехватываем вызов внутри нашего приложения и уведомляем об этом службу, к сожалению, хотя у нас есть некоторые устаревшие приложения, вносящие изменения в данные, и мониторинг таблицы является единственным централизованное место на данный момент.
Любая помощь будет наиболее оценена.
Резюме:
- Необходимо реагировать на изменения данных таблицы в реальном времени
- Производительность критична.
- Ожидается большой объем трафика
- Опрос и запланированные задания не являются опцией (или в режиме реального времени)
- Реализация сервис-брокера слишком велика (но может быть только решение?)
- Код CLR еще не исключен, но должен быть перфомант, если предлагается
- Слушателем/монитором может быть удаленная машина (вероятно, такая же физическая сеть)