Dove è un buon punto di partenza per imparare a usare la cache personalizzata in .Net

2

Sto cercando di migliorare alcune prestazioni del nostro sito, ma non sono sicuro di preciso da dove cominciare. Abbiamo del caching di oggetti personalizzati, ma penso che possiamo fare di meglio.

La nostra attività

Raccogliamo notizie su un tipo di sito web di notizie. Riceviamo circa 500-1000 nuove storie a settimana. Abbiamo pagine di indice che mostrano vari elenchi di articoli e pagine di dettagli che mostrano le singole storie.

Il nostro caso d'uso corrente: ottenere una storia individuale

  1. L'utente effettua una richiesta
  2. Il Data Access Layer (DAL) verifica se l'elemento è nella cache e se l'elemento è nuovo (15 minuti).
  3. Se l'elemento non è nella cache o non è fresco, recupera l'elemento da SQL Server, salva nella cache e torna all'utente.

Problemi con questo approccio

  • La natura pull del caching significa che gli utenti devono pagare il costo di attesa ogni volta che la cache viene aggiornata. Una volta pubblicata, la storia cambia di rado e penso che dovremmo sostituire il modello di pull con qualcosa di meglio.

Le mie opinioni iniziali

  • Il mio pensiero iniziale è che tutte le storie dovrebbero essere memorizzate localmente in qualche tipo di dizionario. (Cache o c'è un altro, modo migliore?). Se la storia non viene trovata, effettua un viaggio nel database, aggiorna il dizionario locale e rispediscilo.
  • Poiché potrebbero esserci aggiornamenti occasionali alle storie, questa dovrebbe essere interamente elaborata dall'utente.
  • Ho visto un video di Brent Ozar, Come StackOverflow scale SQL Server , in cui Brent afferma "la query di database più veloce è quella che non si effettua".

Dove comincio?

A questo punto, non so esattamente quale sia la soluzione. È il caching? C'è un modo migliore di utilizzare la memoria locale? Uso un dizionario, OrderedDictionary, Elenco? Sembra scoraggiante e sto solo cercando alcuni buoni punti di partenza per saperne di più su come fare questo tipo di ottimizzazione.

    
posta John 26.01.2012 - 17:13
fonte

1 risposta

4

Se dovessi scegliere un sistema di memorizzazione nella cache:

Hai controllato il seguente articolo disponibile su MSDN: link ?

È obsoleto ("ritirato" come si dice) ma è comunque una buona lettura, in particolare il secondo capitolo per te, dal momento che non hai ancora deciso quale tecnica / tecnologia desideri utilizzare. Le seguenti tecniche sono menzionate:

  • Uso della cache ASP.NET
  • Utilizzo della cache remota di Singleton
  • Uso dei file mappati in memoria
  • Utilizzo di Microsoft SQL Server 2000 o MSDE per la memorizzazione nella cache
  • Uso delle variabili statiche per la memorizzazione nella cache
  • Utilizzo dello stato sessione ASP.NET
  • Utilizzo della cache e dello stato del lato client di ASP.NET
  • Utilizzo della cache di Internet Explorer

Inoltre, non l'ho mai usato, ma ho sentito molte cose interessanti su Memcached , c'è una risposta interessante al < a href="https://stackoverflow.com/questions/351635/memcached-with-windows-and-net"> Memcached with Windows and .NET domanda che spiega come potrebbe funzionare in un ambiente .NET.

Tuttavia, non so quanto è lunga una storia, quanti bit ci vorrebbe, ma 520000 in dieci anni non sembrano così tanto. Forse Memcached è eccessivo in quel caso, non sono sicuro ...

    
risposta data 26.01.2012 - 18:25
fonte

Leggi altre domande sui tag