Подтвердить что ты не робот

Публиковать/подписывать шаблон в SQL

Фон:

У нас есть большая (15+ миллионов) таблица предметов, которая часто обновляется в течение дня (в среднем 300K ежедневно). Ожидающие изменения сохраняются в промежуточной таблице, и задание выполняется в течение дня, чтобы читать изменения из этой таблицы, делать обновления и отмечать изменения как обработанные.

Многие другие приложения используют данные в таблице элементов для выполнения различных задач. Часто эти задачи являются плановыми и интенсивными, поскольку они включают сравнение живых данных со старыми моментальными снимками и соответственно обновление других систем. Например, мы перечисляем элементы на eBay и сравниваем данные реального элемента с нашими существующими листингами, чтобы узнать, нужно ли нам вставлять какие-либо новые списки eBay, удалять предметы, которые мы продали, обновлять количества и т.д. Поскольку данные такие большие, большинство из этих приложений выполняются нечасто, оставляя вещи устаревшими большую часть времени.

Мой вопрос:

Мы рассматриваем возможность внедрения шаблона издателя/подписчика с помощью Service Broker. Целью было бы опубликовать сообщение, когда элемент изменится, к которому могут подписаться различные другие системы (например, наше приложение eBay). Это позволит нам сделать более подробные обновления ближе к реальным, а не к большим и нечастым обновлениям, которые включают в себя запрос всех данных, а не только то, что изменилось. Однако после использования Google это не похоже на то, что это общий шаблон базы данных, и который вызывает красные флаги. Является ли это неправильным использованием Service Broker (хотя я нашел небольшой раздел в Pro Sql Server 2008 Service Broker при выполнении Pub/Sub)? Как обычно эта проблема решается? Это кажется довольно распространенной проблемой.

TL; ДР:

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

Вопрос: Реализовано ли решение pub/sub style с Service Broker для жизнеспособного решения с высокой громкостью?

4b9b3361

Ответ 1

Это шаблон интеграции очень распространенный.

Я не знаком с SQL Server Service Broker, но если вы посмотрите на любой стек промежуточного промежуточного уровня - TIBCO, Oracle, webMethods, Mule, Informatica и т.д. - все они предлагают "адаптер базы данных", который выполняет описанную вами задачу.

Общий шаблон заключается в том, что обновления в базе данных запускают публикацию сообщений. Это делается либо с помощью триггера в таблице базы данных, либо через адаптер "опрос" таблицы для новых обновлений. У любого метода есть плюсы и минусы.

Основным преимуществом этого шаблона является (как вы подозреваете) более частые и своевременные обновления для других систем - более "реальный" способ ведения бизнеса. Кроме того, если вы выполняете преобразование в формат канонического сообщения, вы получаете более слабую связь между системами и, следовательно, меньше болей, когда необходимо изменить/обновить системы.

Ответ 2

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

Один из разработчиков Service Broker рассказывает о том, как Service Broker справляется с проблемами, с которыми большинство компаний обращаются к решениям NoSQL для.

Я понимаю, что Service Broker должен делать именно то, что вы ищете. Он может даже использовать External Activation для запускать пользовательские приложения, когда данные были изменены.

Ответ 3

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

nServiceBus (Бесплатно до определенного размера, довольно дешево прошлое)

Вы получаете прочную инфраструктуру pub/sub, но с ней легко работать, и есть большая пользовательская база клиентов, статей и образцов.