Кэширование в ASP.NET с помощью класса SqlCacheDependency
Обновлен: Ноябрь 2007
ASP.NET позволяет использовать класс SqlCacheDependency для создания зависимости элемента кэша в таблице или строке в базе данных. При изменении данных в таблице или в определенной строке элемент, имеющий зависимость, становится недействительным и удаляется из кэша. Можно задать зависимость в таблице в Microsoft SQL Server 7.0, SQL Server 2000 и SQL Server 2005. При использовании SQL Server 2005 также можно задать зависимость в конкретной записи.
Используя кэширование с зависимостью SQL, можно значительно повысить производительность приложения в определенных сценариях. Например, предположим, что выполняется построение приложения электронной торговли, отображающее сведения о продукте из базы данных. Без кэширования приложению необходимо запрашивать данные из базы данных каждый раз, когда пользователь хочет просмотреть продукт. Можно же кэшировать сведения о продукте на день за один раз, что обеспечит быстрый ответ, поскольку сведения о продукте уже находятся в памяти. Однако, если сведения о продукте изменятся, кэшированные сведения о продукте синхронизируются с измененными только на следующий день.
Используя зависимость кэша SQL, можно кэшировать сведения о продукте и создать зависимость в изменении таблицы или строки базы данных. Элементы кэша становятся недействительными и удаляются из кэша только после изменения данных. При следующем запросе элемента из кэша, если он не находится в кэше, можно повторно добавить в кэш обновленную версию и быть уверенным в наличии последних данных.
Кэш зависимости SQL также доступен для кэша вывода страниц. Например, можно создать страницу с именем ViewProduct.aspx, показывающую сведения об определенном продукте. Можно задать, чтобы политика кэша страницы была зависимостью SQL, также как и в случае с элементом, добавленным в кэш вручную. При таком подходе страница хранилась бы в кэше до тех пор, пока таблица или строка, от которой она зависит, не была бы изменена. При изменении данных страница была бы воссоздана и вновь сохранена в кэше вывода.
Дополнительные сведения см. в разделе Общие сведения о кэшировании в ASP.NET.
Функциональные возможности
Зависимость кэша SQL ASP.NET позволяет:
Использовать зависимость кэша SQL для кэша приложения и для кэша вывода страниц.
Использовать зависимость кэша SQL с SQL Server 7.0 и более поздними версиями.
Использовать зависимость кэша SQL в многопроцессорном веб-саду (несколько процессоров на одном сервере) или в веб-ферме (несколько серверов, выполняющих одно приложение).
Операции базы данных, связанные с зависимостью кэша SQL, достаточно просты, и не требуют значительных вычислительных затрат от сервера.
Нет необходимости иметь глубокие познания о SQL для настройки зависимости кэша SQL в приложении и в SQL Server. В ASP.NET включены средства, автоматизирующие настройку. Кроме того, можно использовать класс SqlCacheDependencyAdmin для программной настройки зависимости кэша SQL.
Реализация в SQL Server 7.0 и SQL Server 2000
ASP.NET реализует модель опроса для зависимости кэша SQL Server 7.0 и SQL Server 2000. Поток в процессе ASP.NET выполняет опрос базы данных SQL Server с заданным интервалом времени для определения наличия изменений в данных. Если данные изменились, то зависимые элементы кэша станут недействительными и будут удалены из кэша. Можно задать интервал опроса в приложении декларативно в файле Web.config или программно, используя класс SqlCacheDependency.
Кэш зависимости SQL ограничен изменениями данных уровня таблицы для SQL Server 7.0 и SQL Server 2000. Можно настроить ASP.NET для опроса базы данных на наличие изменений в таблице, но не в определенной строке.
Включение кэширования SQL
Для использования зависимости кэша SQL в SQL Server 7.0 и SQL Server 2000 необходимо настроить ее поддержку на SQL Server. ASP.NET предоставляет служебные программы для настройки кэширования SQL на SQL Server, в том числе средство Aspnet_regsql.exe и класс SqlCacheDependencyAdmin. Дополнительные сведения о включении зависимости кэша SQL на SQL Server см. в разделе Практическое руководство. Кэширование вывода страницы с помощью зависимостей ключа кэша.
Реализация в SQL Server 2005
SQL Server 2005 реализует модель зависимости кэша, отличную от SQL Server 7.0 and SQL Server 2000. Для включения зависимости кэша SQL в SQL Server 2005 нет необходимости выполнять какие-то особые этапы конфигурации. Кроме того, SQL Server 2005 реализует модель уведомления об изменениях, в которой уведомления отправляются подписанным на них серверам приложений, и не полагается на модель опроса, необходимую в предыдущих версиях SQL Server.
Зависимость кэша SQL Server 2005 более гибкая в плане типов изменений, о которых можно получить уведомление. SQL Server 2005 отслеживает изменения результирующего набора определенной команды SQL. Если в базе данных возникает изменение, которое изменит результирующий набор команды, то зависимость приводит к объявлению кэшированного элемента недействительным. Это позволяет SQL Server 2005 предоставлять уведомления на уровне строки.
Для запроса, используемого для проверки наличия изменений, имеются некоторые требования. Необходимо предоставить полные имена таблиц, в том числе имя владельца (например, dbo.authors). Как правило, уведомление SQL 2005 поддерживает запросы SELECT и хранимые процедуры, а также поддерживает несколько запросов и вложенные запросы, но не поддерживает статистические операции, например, COUNT(*). Дополнительные сведения о том, какие запросы поддерживаются, а также о правилах для уведомления в SQL Server 2005 см. в разделе "Создание запроса с уведомлениями" (Creating a Query for Notification) электронной документации по SQL Server.
Настройка кэширования SQL в приложениях ASP.NET
Если SQL Server 7.0 или SQL Server 2000 настроен для зависимостей кэша или если была создана соответствующая зависимость команды в SQL Server 2005, то можно настроить приложение для использования зависимости кэша SQL так же, как любой другой зависимости кэша. Например, можно создать профиль кэша в файле Web.config и затем указать ссылку на этот профиль кэша на каждой странице, на которой следует использовать зависимость кэша SQL. Также можно использовать зависимость кэша SQL, включив ее программно с помощью класса SqlCacheDependency. Дополнительные сведения см. в разделе Практическое руководство. Кэширование вывода страницы с помощью зависимостей ключа кэша.