Memorizzazione nella cache di dati e output di cache

3

Non ho molta esperienza nel caching tra le applicazioni web, ma sto cercando di educarmi sul campo e provare varie tecniche e approcci in ASP.NET MVC.

La maggior parte dei tutorial e degli articoli che vedo online menzionano cache di output ( [OutputCache(VaryByParam="...")] ), vari metodi di caching della ciambella ecc.

Solo una piccola parte degli articoli che vedo online discutono i metodi di query nella cache sulla parte superiore di dati / livello aziendale , che possono essere implementati con l'aiuto di System.Runtime.Caching o di qualche altro archivio di valori-chiave .

Ho sempre pensato che i soliti colli di bottiglia nelle applicazioni Web siano query costose o eseguite spesso, non la parte che esegue il rendering in HTML. Almeno dalla mia esperienza sui progetti su cui ho lavorato, è sempre stato così.

Soggettivamente, il caching dell'output si sente anche come un metodo "più sporco" della memorizzazione nella cache sul livello dati / business. Perché è promosso così tanto? È solo perché è più facile da implementare? O mi mancano alcuni punti?

La cache di ouput offre effettivamente benefici sulla memorizzazione nella cache a livello di dati / business? In quali tipi di applicazioni web dovrei concentrarmi su quale? Come trovare l'equilibrio tra questi due?

Le tecniche di memorizzazione nella cache sono generalmente considerate un argomento difficile nello sviluppo del Web e sarebbe bello avere un po 'più di conoscenza sulla cache di output rispetto agli approcci alla cache dei dati, le loro differenze, punti di forza e punti deboli.

    
posta Tom Pažourek 23.09.2016 - 22:20
fonte

1 risposta

4

La cache di output ha grandi vantaggi nelle applicazioni che devono eseguire query o calcoli complessi prima di visualizzare i dati o che trascorrono una parte significativa del loro rendering temporale (trasformando i dati in HTML). Non si tratta solo di eseguire una query complicata ma anche di eseguire calcoli sui dati. E per i siti Web di grandi volumi anche il semplice atto di eseguire il rendering HTML per un elenco di prodotti dal database può richiedere un'enorme quantità di risorse.

Usando una cache di output non è necessario interrogare il database, restituire il risultato, analizzare questi risultati e trasformarli in HTML per essere visualizzati. Una richiesta può colpire un server web e nemmeno dover accedere a un server delle applicazioni.

Il caching dell'output in generale è molto più semplice da fare: si guarda l'output generato dall'applicazione e si decide che questo output non deve essere generato dinamicamente ad ogni richiesta, quindi lo si memorizza nella cache.

Il caching dei dati dell'applicazione è molto più complicato perché devi decidere a un livello molto dettagliato se vuoi memorizzare qualcosa. Ha anche grandi conseguenze sulla base di codice perché il codice di cache è mescolato con il codice dell'applicazione e devi preoccuparti di cose come l'invalidazione della cache, mentre la cache di output si trova "in cima" alla tua applicazione e non devi nemmeno scrivere la tua applicazione con questo tipo di memorizzazione nella cache in mente.

È difficile dire quando si desidera utilizzare la memorizzazione nella cache di output e quando si desidera utilizzare la memorizzazione nella cache dei dati dell'applicazione. La linea tra i due diventa anche sfocata ad un certo punto. Se si memorizza nella cache il risultato di un calcolo costoso ma lo si combina con i dati di una query in tempo reale perché si desidera che i dati in tempo reale per quella parte siano il risultato di tale calcolo "dati dell'applicazione" nella cache o "ouput" nella cache? p>     

risposta data 26.09.2016 - 10:35
fonte

Leggi altre domande sui tag