Jak bude ve Whidbey fungovat sql cache dependency?
Spousta vývojářů smutnila nad tím, že v asp.net není možné(bezpracně) svázat položdy v cache s tabulkami v databázi. Museli jsme si poháhat různými pomocnými soubory, na které pak byly cache položky navázány. Já jsem si vytvořil pro jádro eshopu cachovací framework, který pro načítané objekty z db(kategorie, zboží,...) vytvářel xml soubory, na které se objekty odkazovaly. Kromě žádané závislosti to mělo i výkonnostní přínos, protože nebylo nutné pokaždé generovat složité xml dokumenty, načtení z disku je přece jenom rychlejší. Pak, při importu dat do obchodu, se promazaly příslušné xml soubory a při dalším načtení některé stránky se xml dokument vygeneroval opět z db.
Ve Whidbey je možno kromě závislosti na souboru(třída CacheDependency) použít i závislost na sql tabulce(SqlCacheDependency):
HttpContext.Current.Cache.Insert ("Zbozi_121", ObjektZbozi, new SqlCacheDependency ("ObchodDB", "Zbozi");
Kromě tohoto způsobu je možné použí sql závislost i pro output caching, kde myslím tato funkčnost vynikne ještě více. Jako příklad by mohla sloužit stránka, která generuje ceník všech produktů z tabulky, díky sql závislosti tak stránka bude obsahovat vždy aktuální data a díky výstupnímu cachování pak bude zároveň celá v cache, paráda.
<%@ OutputCache Duration="10" VaryByParam="Kategorie" SqlDependency="ObchodDB:Produkty" %>
Pro použití sql závislosti bude nutné(pro sql 7 a 2000) nutné pro požadované tabulky vytvořit trigery, které budou hlídat změny. Tyto změny budou zapisovat do nově vytvořené tabulky, kterou si bude v pravidelných intervalech prohlížet thread určený k promazávání sql závislosti. Je možné si nastavit interval, v kterém bude thread spouštěn, takže je možné kontrolovat tabulku každých několik sekund nebo jednou za hodinu.