L'accesso ai dati e i livelli di persistenza / archiviazione sono luoghi irresistibilmente naturali per la memorizzazione nella cache. Stanno facendo gli I / O, rendendoli a portata di mano, un posto facile per inserire la cache. Oserei dire che quasi ogni strato di DAL o di persistenza, man mano che matura, riceverà una funzione di memorizzazione nella cache, se non è stato progettato fin dall'inizio.
Il problema è intento . I livelli DAL e di persistenza gestiscono costrutti di livello relativamente basso, ad esempio record, tabelle, righe e blocchi. Non vedono gli oggetti "business" o a livello di applicazione, o hanno molte informazioni su come vengono utilizzati a livelli più alti. Quando vedono una manciata di righe o una dozzina di blocchi che vengono letti o scritti, non è chiaro che rappresentino. "L'account Jones che stiamo attualmente analizzando" non sembra molto diverso da "alcuni dati di riferimento del tasso di imposizione di base di cui l'app ha bisogno una sola volta e a cui non farà riferimento di nuovo". A questo livello, i dati sono dati sono dati.
La memorizzazione nella cache a livello di DAL / persistenza rischia di avere i dati di riferimento fiscale "freddi" che si trovano lì, occupando inutilmente 12,2 MB di cache e spostando alcune informazioni sull'account che, di fatto, verranno utilizzate intensamente in un minuto. Anche i migliori gestori di cache hanno a che fare con scarse conoscenze delle strutture e connessioni dei dati di livello superiore e poca conoscenza di quali operazioni saranno presto disponibili, quindi ricadono negli algoritmi di stima .
Al contrario, la memorizzazione nella cache a livello di applicazione o di business non è così accurata. Richiede l'inserimento di operazioni di gestione della cache o suggerimenti nel mezzo di altre logiche aziendali, il che rende il codice aziendale più complesso. Ma il compromesso è: avere una maggiore conoscenza di come sono strutturati i dati a livello macro e quali operazioni stanno arrivando, ha un'opportunità molto migliore per approssimare l'efficienza di memorizzazione nella cache ottimale ("chiaroveggente" o "Bélády Min").
Indicare se inserire la responsabilità della gestione della cache nel codice aziendale / applicativo ha senso è una richiesta di giudizio e varia in base alle applicazioni. In molti casi, mentre è noto che i livelli DAL / persistenza non lo ottengono "perfettamente giusto", il compromesso è che possono fare un buon lavoro, che lo fanno in un modo architettonicamente "pulito" e molto più intensamente testabile e che la cattura di basso livello evita di aumentare la complessità del codice business / app.
Una minore complessità incoraggia una maggiore correttezza e affidabilità e un time-to-market più rapido. Questo è spesso considerato un grande compromesso: memorizzazione nella cache meno perfetta, ma codice aziendale più tempestivo e di migliore qualità.