2011-03-16 6 views
3

나는 유창한 nHibernate에서 Cache.ReadWrite()의 즐거움을 발견했으며 그 결과를 광범위하게 nhprof으로 분석했습니다.nHibernate에서 캐시해서는 안되는 이유가 있습니까?

꽤 유용 할 것 같지만 약간은기만적인 것처럼 보입니다. 어떤 특정 이유가 있습니까 쿼리에서 자주 사용되는 개체를 캐싱하지 않으시겠습니까? 내 말은, 캐시 속성을 사용하여 모든 매핑을 꾸미기 만하면 안된다는 것입니다 ... 아니면해야합니까?

답변

2

평소와 같이, 그것은 의존 :

뭔가 가능성이있는 경우

는 데이터베이스에서 직접 변경할 두 번째 레벨 캐시, 또는 사용하지 않는 백그라운드 프로세스로 업데이트 할 캐싱 문제가 발생할 것입니다.

액세스 빈도가 낮은 엔티티는 공간을 차지하기 때문에 두 번째 수준 캐싱에 적합하지 않을 수 있습니다.

또한 Inverse로 매핑 된 콜렉션이있는 경우 약간의 이상 함을 볼 수 있습니다. 변경 사항은 2 차 레벨 캐시에서 올바르게 선택되지 않으므로 수동으로 콜렉션을 제거해야합니다.

웹 팜 시나리오 (또는 여러 서버에서 실행중인 앱)가있는 경우 sJhonny가 지적한 것처럼 내장 ASP.net 대신 분산 캐시 (예 : memcached)를 사용해야합니다 은닉처.

+1

그냥 자세히 설명해 드리겠습니다. 고려해야 할 백그라운드 프로세스 등은 아니지만 더 광범위하게는 귀하의 애플리케이션 외부 프로세스에 관한 것입니다. 웹 사이트에서 앱을 실행중인 경우 - 여러 웹 서버가있는 경우 더 복잡한 캐시 메커니즘을 사용해야합니다. 또는 동일한 서버에서 2 개의 웹 사이트를 실행중인 경우에도 동일한 2 차 캐시를 공유하지 않습니다. –

관련 문제