Вопрос о функциональности брокера sql - PullRequest
0 голосов
/ 08 мая 2009

Я начинающий веб-разработчик, работающий над амбициозным проектом веб-приложений.

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

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

Теперь сообщение, которое читает один из этой последней группы пользователей, должно быть заблокировано, чтобы никто другой не мог его прочитать одновременно. Пользователь может затем решить обработать сообщение или нет. Только если он решит разобраться с сообщением, оно может быть удалено из очереди. Если он решает, что не хочет иметь дело с сообщением, сообщение должно быть помещено обратно в очередь (в конце очереди или, по крайней мере, с наивысшим приоритетом), чтобы другой пользователь мог прочитать его и принять решение. .

Могу ли я реализовать это с помощью SQL Service Broker? Я не на том пути?

Спасибо!

1 Ответ

1 голос
/ 08 мая 2009

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

Из того, что вы сказали, я бы реализовал ее в виде простой таблицы, например: создать таблицу сообщений с идентификатором PK, флагом распределения и вашими пользовательскими столбцами. Всякий раз, когда оператор хочет получить последнее сообщение, получите наименьшее значение PK, для которого Allocation = 'N', и обновите Allocation до 'Y'. Это в одной транзакции. Когда / если операция решает вернуть сообщение в очередь, просто установите для ее AllocationFlag значение «N» и обратно.

Это всего лишь пример. База данных в этом случае обеспечивает согласованность, производительность при высокой нагрузке и т. Д.

За экранами все данные, которые вы отправляете в SSB, хранятся и обрабатываются в виде таблиц, поэтому нет никаких оснований для того, чтобы они были обязательно быстрее, чем решение для базы данных.

...