데이터 액세스 및 지속성 / 스토리지 계층은 캐싱을위한 자연스러운 장소입니다. 그들은 I / O를하고있어서 캐싱을 삽입하기에 편리하고 쉬운 곳입니다. 나는 거의 모든 DAL 또는 퍼시스턴스 레이어가 성숙함에 따라 캐싱 기능을 갖게 될 것이라고 감히 주장한다.
문제는 의도 입니다. DAL 및 지속성 계층은 레코드, 테이블, 행 및 블록과 같이 상대적으로 낮은 수준의 구성을 처리합니다. "비즈니스"또는 응용 프로그램 계층 개체를 보지 못하거나 더 높은 수준에서 어떻게 사용되는지에 대한 통찰력이 있습니다. 그들이 읽거나 쓰는 소수의 행이나 12 개의 블록을 볼 때 그것들이 나타내는 지 확실하지 않습니다. "현재 분석중인 Jones 계정"은 "앱이 한 번만 필요로하고 다시 참조하지 않는 일부 기본 과세율 참조 데이터"와 크게 다르지 않습니다. 이 계층에서 데이터는 데이터가 데이터입니다.
DAL / 지속성 계층에서 캐싱하면 "콜드"세금 참조 데이터가 저장되어 무의식적으로 12.2MB의 캐시를 차지하고 실제로 1 분 동안 집중적으로 사용될 계정 정보를 대체합니다. 최고의 캐시 관리자조차도 더 높은 수준의 데이터 구조 및 연결에 대한 정보를 다루지 않으며 어떤 작업이 곧 이루어질 지에 대한 통찰력이 거의 없으므로 추측 알고리즘으로 되돌아갑니다 .
반면에 응용 프로그램 또는 비즈니스 계층 캐싱은 그다지 깔끔하지 않습니다. 다른 비즈니스 로직 중간에 캐시 관리 작업 또는 힌트를 삽입해야하므로 비즈니스 코드가 더 복잡해집니다. 그러나 매크로 레벨 데이터가 어떻게 구성되고 어떤 작업이 진행 될지에 대한 지식이 많으면 최적 ( "취득자"또는 "Bélády Min") 캐싱 효율성을 근사화 할 수있는 훨씬 좋은 기회가 있습니다.
캐시 관리 책임을 비즈니스 / 애플리케이션 코드에 삽입하는 것이 합리적 일지 여부는 판단 요구이며 애플리케이션에 따라 다릅니다. 많은 경우에 DAL / 지속성 계층이 "완벽하게 옳은"것을 얻지 못한다는 것이 알려져 있지만, 절충안은 그들이 아주 좋은 일을 할 수 있다는 것입니다. 낮은 수준의 잡기는 비즈니스 / 앱 코드의 복잡성을 증가시키지 않습니다.
복잡성이 낮을수록 정확성과 신뢰성이 향상되고 출시 기간이 단축됩니다. 이는 완벽한 캐싱이 적지 만 품질이 더 좋고시기 적절한 비즈니스 코드 인 경우가 많은 훌륭한 트레이드 오프로 간주되는 경우가 많습니다.