Domanda

Sto sviluppando un servizio web i cui metodi verranno richiamati da un "banner dinamico" che mostrerà una sorta di coda di messaggi letti da una tabella SQL Server.

Il banner avrà una forte pressione nelle home page dei siti ad alto traffico;ogni volta che il banner verrà caricato, chiamerà il mio servizio web, per ottenere la nuova coda di messaggi.

Ora:Non voglio che tutto questo traffico indirizzi query al database ogni volta che viene caricato il banner, quindi sto pensando di utilizzare la cache asp.net (es.HttpRuntime.Cache[cacheKey]) per limitare gli accessi al database;Cercherò di aggiornare la cache ogni minuto circa.

Ovviamente cercherò di avere i messaggi il meno possibile, per limitare il traffico.

Ma forse ci sono altri modi per affrontare uno scenario del genere;ad esempio potrei scrivere l'ultima versione della coda sul file system e fare in modo che il servizio web acceda a quel file;o qualcosa che mescola i due approcci...

La soluzione è il servizio web C#, asp.net 3.5, sql server 2000.

Qualche suggerimento?Altri approcci?

Grazie

Andrea

È stato utile?

Soluzione

Dipende da molte cose:

  • Se ci sono pochi cambiamenti nei dati (pensa al backend con il pulsante "pubblica" o batch giornalieri), utilizzerei sicuramente file statici (aggiornati tramite push dal backend).Abbiamo utilizzato questa soluzione su un paio di siti di grandi dimensioni e ha funzionato davvero bene.
  • Se i dati sono sufficientemente piccoli, la memorizzazione nella cache (ad es.Http Cache) è praticabile, ma fai attenzione ai problemi di blocco e fai attenzione anche a Http Cache non lo farà funzionano così bene con un carico di memoria elevato, perché gli elementi possono scadere in anticipo se il framework necessita di memoria.Ne sono stato morso prima!Con le avvertenze di cui sopra, Http Cache funziona abbastanza bene.

Altri suggerimenti

Penso che la memorizzazione nella cache sia un approccio ragionevole e puoi fare un ulteriore passo avanti e aggiungere una dipendenza SQL.

Cache ASP.NET:Dipendenza della cache SQL con SQL Server 2000

Scrivere un file è una soluzione migliore IMHO: è servito dal codice del kernel IIS, senza l'enorme sovraccarico di asp.net e puoi copiare il file su CDN in seguito.

L'incasso delle dipendenze AFAIK non è molto efficiente con SQL Server 2000.

Inoltre, un modo per aggirare la limitazione di memoria menzionata da Skliwz è che se stai utilizzando questo servizio al di fuori della normale applicazione puoi isolarlo nel proprio pool di app.L'ho già visto fare prima, il che aiuta anche.

Grazie a tutti, poiché i dati sono di piccole dimensioni, ma le tabelle sottostanti cambieranno, penso che seguirò la strada di HttpCache:In realtà ho bisogno di un modo per ridurre l'accesso al database, anche se i dati cambiano (quindi questo è il motivo per non utilizzare una dipendenza SQL diretta come suggerito da @Bloodhound).

Penso che farò qualche stress test prima di renderlo pubblico.

Grazie ancora a tutti.

Naturalmente potresti (dovresti) utilizzare anche le funzionalità di memorizzazione nella cache nel file Libreria SixPack .

  • Cache diretta (normale), basata su HttpCache, che funziona inserendo attributi nella tua classe.Il più semplice da usare, ma in alcuni casi è necessario attendere che il contenuto venga effettivamente recuperato dal database.
  • Precarica la cache da zero, che, dopo la prima chiamata, inizierà ad aggiornare la cache dietro le quinte e in alcuni casi avrai la garanzia di avere contenuti senza aspettare.

Maggiori informazioni su Home page della libreria SixPack.Tieni presente che il codice (in particolare la cache di inoltro) viene sottoposto a test di carico.

Ecco un esempio di semplice memorizzazione nella cache:

    [Cached]
    public class MyTime : ContextBoundObject
    {
            [CachedMethod(1)]
            public DateTime Get()
            {
                    Console.WriteLine("Get invoked.");
                    return DateTime.Now;
            }
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top