AspNet.sk     Diskusné fóra     Vitajte v QuickStarts     ASP.NET     Silverlight     Ako môžem...? (en)     Class prehliadač Príklady chcem v ...   
Menu
Skip Navigation Links.
Späť na ASP.NET príručku

ASP.NET QuickStart Príručka

SQL Cache Invalidation Nové v 2.0

V predošlom príklade boli dáta cachované po dobu 60 sekúnd, nezávislé na tom, či údaje v databáze boli zmenené. SQL cache invalidation Vám umožňuje spraviť cachovanú položku závislú na databáze tak, že cachovaná položka bude vymazaná len vtedy, keď budú dáta v databáze zmenené.

Polling-based Invalidation

Tento mechanizmus používa zhromažďovanie dát (polling) ako kontrolu, či bola tabuľka aktualizovaná od cachovania stránky. Povolenie cachovania založeného na tabuľkách si vyžaduje nasledujúce kroky:

1) Povolenie prihlásenia pre databázy použitím nástroja aspnet_regsql.exe.
>aspnet_regsql.exe -S ".\SQLExpress" -E -d "pubs" -ed
Tento krok je potrebné spraviť pre každú databázu len raz.

2) Povolenie prihlásenia pre tabuľku(y), na ktorých chcete využívať závislosti, použitím nástroja aspnet_regsql.exe.
>aspnet_regsql.exe -S ".\SQLExpress" -E -d "pubs" -et -t "authors"
3) Registrovanie prihlásenia v nastaveniach aplikácie.
<system.web>
    <caching>
      <sqlCacheDependency enabled="true" pollTime="1000" >
        <databases>
          <add name="PubsDB" connectionStringName="Pubs" />
        </databases>
      </sqlCacheDependency>
    </caching>
</system.web>
Poll time určuje ako často aplikácia kontroluje zmenu dát.

4) SQL závislosti môžu byť potom použité v direktíve OutputCache:
<%@ OutputCache Duration="999999" SqlDependency="Pubs:Authors" VaryByParam="none" %>
Alebo určené priamo v ovládacích prvkoch datasource:
<asp:SqlDataSource EnableCaching="true" CacheDuration="Infinite" SqlCacheDependency="PubsDB:Authors" ... />
Nasledujúci príklad využíva cachovanie výstupu pre SQL dátový zdroj použitím hlásení založených na tabuľkách. Pozorujte časovú známku (timestamp) na spodnej strane aplikácie, ktorá by mala ostať statická. Na editáciu dát môžete použiť príklad s GridView. Obnovenie stránky by potom malo zobraziť aktualizované údaje a novú časovú známku (timestamp).

VB SqlCacheDependency
Run Sample View Source

Sql Server 2005 Notification-based Cache Invalidation

Tento mechanizmus používa mechanizmus hlásení o zmene dotazov Sql Servera 2005 na objavenie zmien do výsledkov dotazov. Na rozdiel od polling based invalidation pre Sql Server 7.0 a 2000 tento typ vyžaduje o mnoho menej nastavení.

  1. Na rozdiel od polling based validation nie je potrebné registrovať <sqlCacheDependency> v nastaveniach Vašej aplikácie. Okrem toho sa nevyžaduje žiadne špeciálne nastavovanie pomocou nástroja aspnet_regsql.exe .


  2. Závislosť založená na hláseniach je konfigurovaná v direktíve OutputCache použitím reťazca CommandNotification. Táto hodnota ukazuje ASP.NET, že závislosť založená na hláseniach by mala byť vytvorená pre stránku alebo ovládacie prvky datasource.

    V stránke:
    <%@ OutputCache Duration="999999" SqlDependency="CommandNotification" VaryByParam="none" %>
    V ovládacom prvku datasource:
    <asp:SqlDataSource EnableCaching="true" SqlCacheDependency="CommandNotification" CacheDuration="Infinite" ... />
  3. Metóda System.Data.SqlClient.SqlDependency.Start() musí byť zavolaná v aplikácii pred spustením prvého SQL dotazu. Táto metóda môže byť uložená do udalosti Application_Start() v súbore global.asax .
Vždy keď je príkaz vydaný na Sql Server 2005, ASP.NET a ADO.NET automaticky vytvoria závislosť vyrovnávacej pamäte, ktorá dáva pozor na hlásenia o zmenách odoslané z Sql Servera. Ak sú dáta na Sql Serveri zmenené, tak tieto hlásenia zapríčinia to, že cachované dotazy na webovom serveri sa stanú neplatnými. Keď je najbližšie vyžiadaná stránka alebo ovládací prvok datasource združená so závislosťou, bude stránka alebo ovládací prvok datasource spustený opätovne ako aj slúžiaci cachovaným informáciam.

Bežné problémy zabraňujúce dotazom pracovať s hláseniam o dotazoch Sql Servera 2005 sú:
  1. Dotazy musia explicitne obsahovať v údaji SELECT (SELECT statement) názvy stĺpcov. Požitie "SELECT *" bude mať za následok dotaz, ktorý nebude registrovaný hláseniami o dotazoch Sql Servera 2005.
  2. Názvy tabuliek v dotazoch musia obsahovať meno vlastníka. Napríklad ak vydáte dotaz na tabuľku authors v lokálnej databáze (pubs database), musí sa dotaz odvolávať na tabuľku pod "dbo.authors".
  3. Identita bezpečnosti (security identity) prevádzkujúca dotaz musí mať práva registrovať dotazy pre hlásenia v Sql Serveri 2005. Toto právo môže byť pridelené nasledujúcim T-SQL príkazom: GRANT SUBSCRIBE QUERY NOTIFICATIONS TO username.
  4. Identita bezpečnosti (security identity) prevádzkujúca dotaz musí mať takisto práva odosielať hlásenia o dotazoch z Sql Servera 2005. Toto právo môže byť pridelené nasledujúcim T-SQL príkazom: GRANT SEND ON SERVICE::SqlQueryNotificationService TO username.
Poznámka: Existuje mnoho obmedzení v syntaxe dotazov, ktoré podporujú hlásenia o dotazoch. Pre zoznam týchto špeciálnych obmedzení si prosím prezrite tému "Vytváranie dotazov o hláseniach (Creating a Query for Notification)" na Sql Server 2005 Books Online. Takisto ak vyjde najavo, že dotazy nie sú cachované, ale namiesto toho sú spúšťané pri každej požiadavke, buď dotaz nespĺňa obmedzenia požadované Sql Serverom 2005, alebo Sql Server 2005 vygeneroval chybu pri pokuse o nastavenie hlásení pre dotaz. Práve každý z týchto prípadov zapríčiňuje tichý neúspech pri pokuse o nastavenie závislosti vyrovnávacej pamäte v ASP.NET, s výsledkom, že závislosť vyrovnávacej pamäte je vždy neplatná, a preto sú všetky združené dotazy spustené pri každej požiadavke.
Microsoft .NET Framework SDK QuickStart Tutorials Version 2.0
Copyright © 2005 Microsoft Corporation. All rights reserved.
Preklad do slovenského jazyka - Copyright © 2005 - 2007 www.aspnet.sk, www.qsh.sk
Pošlite komentár k tejto stránke
Copyright © 2002 - 2008 Chastia, spol. s r. o., Igor Stanek, Designed by Lacino
Portál je hostovaný na serveroch firmy Quantasoft - www.qsh.sk.