2009-06-13 1 views
7

나는 현재 ORM 커스텀 개발을 사용하고 있으며, nhibernate 로의 이동을 계획하고있다.NHibernate 캐쉬 만료

현재 L1 세션 레벨 캐싱과 L2 애플리케이션 레벨 캐싱을 모두 사용합니다.

개체가 L1 캐시에 의해 L2 캐시에서 요청 될 때마다 마지막로드 이후 수정 된 데이터베이스를 검사하고 수정 된 경우에만로드합니다.

NHibernate에서이를 수행 할 수 있습니까? 요컨대, 캐싱은 항상 최신 데이터를 가져오고 객체 생성 및로드 시간을 절약 해주기 때문에 저를 해치지 않습니다.

답변

14

어쨌든 DB에 충돌해야하는 경우 L2 캐시가 필요하지 않습니다. 그것은 캐싱의 전체 요점이며 가능한 한 DB를 치지 마십시오.

AFAIK 당신이 설명하는 것과 같은 구현 된 캐싱 전략은 없지만 NHibernate L2 캐시는 완전히 플러그 가능하므로 구현할 수 있습니다. 그러나, 나는 위에서 언급 한 이유들 때문에 그렇지 않을 것입니다.

NHibernate 외에 동일한 DB를 타는 다른 앱이나 다른 DAL이있는 경우 오래된 데이터를 가져 오는 것은 문제 일뿐입니다. 이 경우 SysCache2 구현을 사용할 수 있습니다. 내부적으로 SqlCacheDependencies을 사용하면 원본으로 사용하는 테이블의 데이터가 변경 될 때 캐시 영역을 무효화 할 수 있습니다.

팜에서 실행되는 단일 응용 프로그램 인 경우 Velocity provider을 사용하십시오.

DB를 타격하는 NHibernate 앱 인스턴스가 하나 뿐인 경우 any cache strategy을 사용하면 오래된 데이터를 가져올 염려가 없습니다.

은 참조 : 혼자와 서로

0

빌드 - 인 레벨 1 캐시 NHibernate에에서 매우 정교하지 않습니다 -proc 자연. 따라서 NHibernate 앱의 성능을 향상시키기 위해서는 반드시 2 차 레벨 캐시가 있어야합니다. 데이터베이스로 이동하는 데 걸리는 시간을 줄여줍니다. NHibernate 2 차 수준 캐시를 연결하는 많은 타사 통합이 있습니다. NCache은 코드를 변경하지 않아도되는 좋은 예입니다. 여기에서 더 많은 것을 읽으십시오,

http://www.alachisoft.com/ncache/nhibernate-l2cache-index.html