Как знает, что SQLCACHEDEPENTEDENTEDENTINGENTINGENTIONS возвращается к слушателям, когда данные в таблице меняются?

StackOverflow https://stackoverflow.com/questions/7353558

Вопрос

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

1) Сервисный брокер должен быть включен в базе данных, и необходимо установить некоторые разрешения.

2) Схема базы данных должна быть развернута.

3) Используя aspnet_regsql.exe, включите зависимость кэша SQL для базы данных и таблиц, необходимые для кэширования данных (этот шаг создает таблицу для отслеживания изменений и запуска в таблицах, чтобы захватить изменения и увеличить значение в этой таблице).

4) Установите зависимость кэша SQL в приложении .NET. Например, в веб -приложении вам нужно добавить значения конфигурации для времени опроса, строки подключения и т. Д.; Запустите/остановите зависимость в вашем Global.asax.cs, а затем добавьте зависимости от кэша SQL, когда вы добавляете элементы в свой кэш.

4a) Часть того, что происходит при запуске зависимости, заключается в том, что инфраструктура настроена на очередь, услугу и Sproc для связи и очистки впоследствии. Используя SQL -запросы Profiler, вы можете увидеть создание подключения и канал связи, который настраивается в службе для приложения для получения сообщений с SQL Server.

5) Вот где я запутался. На этом этапе я кэшировал элемент в своем кэше приложения со ссылкой на зависимость кэша SQL от базовой таблицы, чтобы мое приложение могло получить изменения в случае изменения этой строки. Если я вручную запускаю обновление этой строки, я вижу, как нажимает триггер, а значение в таблице отслеживания увеличивается на 1. Однако я не вижу никакого сообщения, возвращающегося к приложению, ничего на SQL -профилиру элемент удален из кеша. Я также ничего не вижу в очереди в базе данных (ни динамическая очередь приложений, ни стандартные очереди ошибок/передачи)

Мой вопрос: что следит за этой таблицей отслеживания в базе данных, чтобы сообщения могли быть отправлены обратно на зависимости SQL, которые обеспокоены изменениями в этих данных?

Любая помощь очень ценится ... Я просыпал многие онлайн -ссылки и не могу найти конкретного объяснения этого.

Это было полезно?

Решение

В вашей базе данных создается новая таблица, в которой содержится имя таблицы, которую вы хотите проверить для обновлений, и номер изменения. Каждая таблица, которую вы настройки для SQLdePendence имеют триггер, настроенный для обновлений/вставки, который увеличивает изменение в новой таблице, которую я только что описал.

Ваша ментальная модель того, как это работает, задом наперед. Ваше приложение проверяет журнал, чтобы определить, изменилась ли таблица.

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

+Table Name + ChangeNumber +
| Product   | 1            |
+-----------+--------------+
| User      | 1            |
+-----------+--------------+

Теперь, если вы что -то измените в любой из этих таблиц, триггер увеличится ChangeNumber И теперь мы знаем, что они изменились.

Очевидно, что это еще не все, но это общая идея.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top