NHibernate는 데이터베이스 프로그래밍을 단순화하기 때문에 .NET 애플리케이션을 위한 인기 있는 ORM(객체 관계형 매핑) 솔루션입니다. 결과적으로 많은 트래픽이 많은 애플리케이션이 NHibernate를 사용하므로 데이터베이스에서 확장성 병목 현상에 직면합니다.
이를 해결하기 위해 NHibernate는 캐싱 인프라를 제공하여 애플리케이션이 대신 인메모리 캐시 저장소를 사용할 수 있도록 하고 이러한 높은 요청 로드로 데이터베이스를 고갈시키는 것을 방지합니다. NHibernate 캐싱에는 XNUMX단계 캐시와 XNUMX단계 캐시가 포함됩니다.
NCache 세부 정보 Hibernate Caching-Docs Dapper Micro-ORM 사용 NCache
Hibernate 첫 번째 레벨 캐시와 그 한계
NHibernate First Level(1st level) Cache는 세션 객체와 관련된 기본적인 독립형(in-proc) 캐시를 제공하며 현재 세션으로만 제한됩니다. 기본적으로 이 1단계 캐시는 세션당 데이터베이스에 대한 SQL 쿼리 수를 줄입니다. 그러나 이 1단계 캐시에는 다음과 같이 많은 제한이 있습니다.
- 각 프로세스에는 데이터 무결성을 어렵게 만드는 다른 1단계 캐시와 동기화되지 않는 자체 1단계 캐시가 있습니다.
- 캐시 크기는 프로세스 메모리로 제한되며 확장할 수 없습니다.
- 작업자 프로세스 재활용으로 인해 캐시가 플러시됩니다. 그런 다음 다시 로드해야 하므로 애플리케이션 성능이 저하됩니다.
NCache 세부 정보 NHibernate와 DB 동기화 Hibernate 쿼리 캐싱
솔루션: Hibernate를 위한 분산 캐시
NHibernate Second Level Cache가 Session Factory에 존재함 이는 여러 사용자 세션이 공유 캐시에 액세스할 수 있음을 의미합니다. 또한, NHibernate 2nd 레벨 캐시는 플러그인 가능한 아키텍처를 가지고 있으므로 프로그래밍 없이 타사 분산 캐시를 플러그인할 수 있습니다. NCache 구현했다 Hibernate 두 번째 레벨 캐시 제공자 코드 변경 없이 NHibernate에 대한 분산 캐시로 사용할 수 있습니다.
다음 예는 사용 방법을 보여줍니다. NCache NHibernate 애플리케이션에서 2차 레벨 캐시로:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<hibernate-configuration> <session-factory> <property name="cache.provider_class">Alachisoft.NCache.Integrations.NHibernate.Cache.NCacheProvider, Alachisoft.NCache.Integrations.NHibernate.Cache </property> <property name="proxyfactory.factory_class"> NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate </property> <property name="cache.use_second_level_cache">true </property> </session-factory> </hibernate-configuration> <ncache> <cache-regions> <region name="AbsoluteExpirationRegion" cache-name="myCache" priority="Default" expiration-type="sliding" expiration-period="180" use-async="false"> <region name="default" cache-name="myCache" priority="default" expiration-type="none" expiration-period="0"> </region></region></cache-regions> </ncache> |
다음은 몇 가지 이점입니다. NCache NHibernate 2차 레벨 캐시로:
- NCache 프로세스 및 서버 간 동기화: NCache 여러 서버에서 공유되는 캐시입니다. 이렇게 하면 여러 서버에서 캐시가 일관되고 모든 캐시 업데이트가 올바르게 동기화되어 데이터 무결성 문제가 방지됩니다.
- 확장 가능한 캐시 크기: NCache 모든 캐시 서버의 메모리를 함께 풀링합니다. 따라서 캐시 클러스터에 더 많은 서버를 추가하기만 하면 캐시 크기를 늘릴 수 있습니다. 이는 캐시가 100기가바이트, 심지어 테라바이트까지 커질 수 있음을 의미합니다.
- 응용 프로그램 프로세스 재활용은 캐시에 영향을 주지 않습니다. 모든 데이터가 out-proc 분산 캐시에 있으므로 애플리케이션 프로세스가 상태 비저장이 됩니다. 따라서 응용 프로그램 프로세스 재활용은 캐시에 영향을 주지 않습니다.
- 더 큰 트랜잭션 로드를 처리하기 위한 선형 확장성: 데이터베이스가 병목 현상을 일으킬 염려 없이 더 큰 트랜잭션 로드를 관리할 수 있습니다. 이러한 성능은 분산 캐시가 선형적으로 확장되고 데이터베이스 트래픽을 90%까지 감소시키기 때문에 가능합니다.
- 클라이언트 캐시를 사용하여 데이터를 In-proc에 저장합니다. NCache 작업자 프로세스 내에서 실행되는 클라이언트 캐시, 동기화된 로컬 캐시 또는 캐시 상단 캐시에 대한 지원을 제공합니다. 이를 사용하여 Hibernate 애플리케이션 내에서 더 많은 성능을 얻을 수 있습니다.
NCache 세부 정보 최대 절전 모드 및 NCache NHibernate Cache- 비디오
결론!
보시다시피 분산 캐시는 NCache NHibernate를 사용하면서 다중 서버 구성에서 애플리케이션을 계속 실행할 수 있습니다. 다음을 사용하여 애플리케이션을 확장하고 높은 트랜잭션 로드를 처리할 수도 있습니다. NCache Hibernate 두 번째 레벨 캐시로. 완전히 작동하는 60일 평가판 다운로드 NCache Enterprise 그리고 직접 사용해 보세요.