O acesso a dados e as camadas de persistência / armazenamento são lugares irresistivelmente naturais para armazenamento em cache. Eles estão fazendo as E / Ss, tornando-as um local prático e fácil para inserir o cache. Ouso dizer que quase todas as camadas de DAL ou persistência receberão uma função de armazenamento em cache - se ela não for projetada dessa maneira desde o início.
O problema é intencional . As camadas DAL e persistência lidam com construções de nível relativamente baixo - por exemplo, registros, tabelas, linhas e blocos. Eles não veem os objetos "comercial" ou da camada de aplicativo ou têm muito conhecimento de como estão sendo usados em níveis mais altos. Quando eles veem um punhado de linhas ou uma dúzia de blocos sendo lidos ou gravados, não está claro o que eles representam. "A conta Jones que estamos analisando atualmente" não parece muito diferente de "alguns dados básicos de referência da taxa de tributação de que o aplicativo precisa apenas uma vez e aos quais não fará referência novamente". Nesta camada, dados são dados são dados.
O armazenamento em cache na camada DAL / persistência corre o risco de manter os dados de referência fiscal "frios", ocupando inútil 12,2 MB de cache e deslocando algumas informações da conta que, de fato, serão intensivamente usadas em apenas um minuto. Até os melhores gerenciadores de cache estão lidando com pouco conhecimento das estruturas e conexões de dados de nível mais alto, e com poucas informações sobre quais operações serão lançadas em breve, para que voltem aos algoritmos de estimativa de estimativa .
Por outro lado, o cache da aplicação ou da camada de negócios não é tão elegante. Requer a inserção de operações ou dicas de gerenciamento de cache no meio de outra lógica comercial, o que torna o código comercial mais complexo. Mas a desvantagem é: Tendo mais conhecimento de como os dados no nível macro são estruturados e de quais operações estão surgindo, ela tem uma oportunidade muito melhor de aproximar a eficiência ideal do cache ("clarividente" ou "Bélády Min").
Se a inserção da responsabilidade de gerenciamento de cache no código comercial / do aplicativo faz sentido é uma decisão de julgamento e variará conforme o aplicativo. Em muitos casos, embora seja sabido que as camadas DAL / persistência não serão "perfeitamente corretas", a desvantagem é que elas podem fazer um bom trabalho, mas de uma maneira arquitetonicamente "limpa" e muito mais intensivamente testável , e que a captura de baixo nível evita aumentar a complexidade do código comercial / de aplicativo.
Menor complexidade incentiva maior correção e confiabilidade e menor tempo de colocação no mercado. Isso costuma ser considerado uma grande desvantagem - armazenamento em cache menos perfeito, mas código comercial mais oportuno e de melhor qualidade.