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
- L'utente effettua una richiesta
- Il Data Access Layer (DAL) verifica se l'elemento è nella cache e se l'elemento è nuovo (15 minuti).
- 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.