Опрашивайте базу данных каждую секунду и запускайте n длительных задач

Устаревшее приложение пишет в нашу базу данных потенциально каждую секунду. Он может написать несколько записей за один раз. Каждая из этих записей должна быть обработана как можно скорее и требует вызова долгосрочного внешнего веб-сервиса для каждой из этих записей.

Я задаюсь вопросом о лучшей архитектуре / шаблоне, чтобы справиться с этим: нам нужно опрашивать базу данных каждую секунду, а затем - в зависимости от количества новых записей - запускать n этих долгосрочных задач (вызывается внешний веб-сервис). Эти задачи запишут свой результат обратно в базу данных, где он получен устаревшим приложением.

Должен ли я "просто" использовать комбинацию System.Threading.Tasks и System.Timers.Timer для реализации этого или есть лучшие альтернативы? (на основе.Net 4.0 и SQL Server 2008)

ОБНОВЛЕНИЕ: у нас не включен SQL Server Service Broker, и в идеале я хотел бы найти решение без него; по крайней мере, я думаю, что это немного накладные расходы для этой задачи. Но я счастлив быть убежденным в обратном.

2 ответа

Решение

Для меня более конкретно о реализации:

Я бы использовал сервер Windows для запроса базы данных каждую секунду (как указано в ваших требованиях).

Тогда я бы сделал асинхронный WCF, так как они могут работать долго, как вы сказали.

НТН.

Этот вопрос вызывает больше беспокойства о глобальном дизайне, чем о специфике.net. Я бы определенно пошел с триггерным решением на записи изменений. Чтобы избежать загрузки БД, этот триггер будет записывать только характер события: идентификатор записи, тип события в отдельной таблице событий. Процесс опроса будет считывать только таблицу событий, обрабатывать события соответствующим образом и архивировать их для статистических целей. Таким образом, у вас есть контроль над выбором нагрузки, вы можете настроить длительный процесс в соответствии с вашими требованиями к производительности, и у вас есть следы того, что было сделано. Я построил аналогичную систему с около 100 миллионами событий, прибывающих одновременно без каких-либо проблем.

Другие вопросы по тегам