Как мне создать специфичную для строки зависимость кеша sql? - PullRequest
5 голосов
/ 02 июня 2009

Я хочу использовать кэширование данных в моем приложении .net C #. Пока что я добавил кеширование данных и добавил зависимости кеша sql для определенных таблиц. Но это не достаточно хорошо. Эти таблицы будут обновляться слишком часто, но они не будут относиться ко многим кэшированным объектам Это сделает кеширование данных практически бесполезным, потому что оно часто сбрасывается. Я хочу реализовать зависимость кеша sql от конкретных строк для каждого объекта. Как я могу это сделать?

1 Ответ

5 голосов
/ 02 июня 2009

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

Таким образом, технически вы можете подписаться на определенные уведомления, отправив запрос, специфичный для этой строки, т.е. с жестко закодированным предложением WHERE. Вам придется изменить свой код, чтобы извлекать и кэшировать только необходимые данные построчно, а не извлекать целые таблицы и кэшировать их в памяти. Черт возьми, тебе все равно придется это делать, если ты хотя бы обеспокоен размером этих таблиц. Кэширование целых таблиц должно выполняться только для каталожных и справочных данных, которые изменяются нечасто или не изменяются совсем.

Вы также можете выбрать для извлечения и кэширования разделов данных, т.е. отдельные диапазоны ключей (скажем, между «A» и «D», «E» и «H» и т. д. и подписка на получение уведомлений для этого конкретного раздела данных.

Если вы хотите понять, как работает SqlDependency в моем блоге есть несколько статей, посвященных этому, в том числе распространенные ошибки в программировании SqlDependency и проблем развертывания с SqlDependency .

...