Hibernate 두 번째 레벨 캐시

NHibernate는 인기 있는 ORM(Object-Relational Mapping) 프레임워크입니다. .NET 애플리케이션, 객체 지향 코드를 통해 원활한 데이터베이스 상호 작용을 가능하게 합니다. 그러나 애플리케이션이 대량의 트랜잭션 로드를 처리할 때 빈번한 데이터베이스 쿼리로 인해 성능 병목 현상이 발생하는 경우가 많습니다.

이를 해결하기 위해 NHibernate는 2차 캐싱을 제공합니다. 이는 객체를 애플리케이션 수준의 메모리에 보관하여 데이터베이스에 반복적으로 액세스할 필요성을 줄여줍니다. NCache매우 빠르고 확장 가능한 분산 캐시로서 다음과 같은 역할을 합니다. NHibernate 2차 캐시 애플리케이션 속도, 확장성, 안정성을 크게 향상시키는 공급업체입니다.

NCache NHibernate용 고성능 분산형 2차 캐시(L2)를 제공하여 .NET 애플리케이션의 데이터베이스 병목 현상을 제거합니다. 선형 확장성을 제공하며, P2P 클러스터링을 통해 100% 가동 시간을 보장하고, 통합을 위해 코드 변경이 전혀 필요하지 않습니다.

어떻게 NCache NHibernate 애플리케이션 성능을 향상시키는 방법은 무엇일까요?

NCache 아래 설명된 대로 NHibernate를 더 빠른 쿼리, 줄어든 데이터베이스 부하, 높은 가용성으로 향상시킵니다.

  • 성능 : 자주 액세스하는 데이터를 메모리에 저장하면 데이터베이스 접근 횟수가 최대 90%까지 줄어들어 쿼리 실행 속도가 향상되고 응답성이 개선됩니다. 이는 여러 웹 서버에서 반복적인 읽기 요청이 폭증하여 데이터베이스가 이를 처리하지 못하는 "데이터베이스 병목 현상"을 방지하고, 애플리케이션 계층이 데이터베이스 부하를 최소화하면서 선형적으로 확장될 수 있도록 합니다. 내부 벤치마크 결과는 다음과 같습니다. NCache 초당 2만 건 이상의 작업을 밀리초 미만의 지연 시간으로 처리할 수 있습니다.
    • 클라이언트 캐시: 이를 통해 애플리케이션은 자체 메모리에서 캐시된 데이터 중 가장 자주 사용되는 하위 집합에 액세스할 수 있으므로 네트워크 호출이 줄어들고 성능이 더욱 향상됩니다.
    • 컴팩트 직렬화: NCache 효율적인 직렬화 및 역직렬화를 보장합니다. 컴팩트 직렬화따라서 표준 .NET 직렬화보다 데이터 검색 속도가 훨씬 빨라집니다.
  • 선형 확장성: NCache 캐시 서버를 추가하여 애플리케이션을 동적으로 확장할 수 있습니다. 또한 클러스터 환경에서 캐시 부하가 균등하게 분산되도록 보장합니다.
  • 고가용성: NCache'의 피어투피어 클러스터링은 가동 중지 시간을 없애고, 자동 장애 조치 및 복제는 데이터 손실을 방지하고 캐시 일관성을 유지합니다. NCache 다음을 포함한 다중 캐싱 토폴로지를 통해 지능형 데이터 복제를 제공합니다.
    • 파티션 복제본 캐시: 데이터 손실을 방지하기 위해 여러 파티션에 캐시된 데이터의 중복 사본을 유지합니다.
    • 미러링된 캐시: 실시간 장애 조치를 위한 동기 백업 메커니즘을 제공합니다.
    • 복제된 캐시: 클러스터의 여러 노드에 동일한 캐시를 분산하여 데이터 가용성을 보장합니다.
  • 일반적인 사용 사례 NCache NHibernate L2 캐시:
    • 트래픽이 많은 웹 팜: 데이터베이스 경합 없이 여러 서버에 걸쳐 .NET 애플리케이션을 확장하는 방법.
    • 실시간 데이터 일관성: SQL 종속성을 사용하여 캐시를 외부 데이터베이스 변경 사항과 동기화합니다.
    • 레거시 시스템 현대화: 플러그 앤 플레이 제공자를 사용하여 기존 NHibernate 앱의 성능을 향상시킵니다.

기술적 비교: NHibernate L1 vs. NCache L2

제품 특장점 NHibernate L1(세션 캐시) NCache (분산형 L2 캐시)
범위 및 격리 트랜잭션 범위로 제한됩니다. 데이터는 단일 트랜잭션에 격리됩니다. ISession 목적. 프로세스 전체/클러스터 전체에 걸쳐 데이터가 공유됩니다. 웹 팜 내의 모든 세션과 모든 서버에서 데이터가 공유됩니다.
데이터 지속성 일시적인 객체입니다. 세션이 종료되거나 요청이 끝나면 객체는 즉시 소멸됩니다. 영구 메모리 저장. 데이터는 애플리케이션 재시작이나 세션 종료와 관계없이 캐시 클러스터에 저장됩니다.
확장성 처리 중인 프로세스 내에서만 사용 가능합니다. 단일 웹 서버의 메모리 용량에 제한되며, 웹 서버 팜 전체에서 공유할 수 없습니다. 선형 확장성. 캐시 서버를 동적으로 추가하여 저장 용량과 처리량을 늘릴 수 있습니다.
데이터베이스 동기화 없음. L1에는 다른 프로세스가 데이터베이스를 업데이트했는지 알 수 있는 메커니즘이 없습니다. 자동 동기화. 사용 SqlCacheDependency오라클 종속성 또는 폴링을 사용하여 오래된 데이터를 무효화할 수 있습니다.
쿼리 캐싱 해당 사항 없음 (L1은 주로 ID 기반 조회를 위한 것입니다). 지원됩니다. 복잡한 쿼리 결과를 캐시하여 비용이 많이 드는 SQL 실행을 반복적으로 수행하지 않도록 합니다.

주요 특징 NCache NHibernate를 위해

다음은 몇 가지 주요 기능입니다. NCache NHibernate 사용자에게 제공:

코드 변경이 필요하지 않음

  • 쉽게 통합 최대 절전 모드 기존 애플리케이션 코드를 수정하지 않고도 플러그 앤 플레이 솔루션으로 사용할 수 있습니다.
  • 모든 구성은 XML 기반 구성 파일을 통해 관리됩니다.

다중 캐시 가능 지역

  • 캐시 항목 우선순위: 캐시된 데이터에 다양한 우선 순위 수준(높음, 보통, 낮음)을 지정하여 자주 액세스되는 객체가 캐시에 더 오래 보관되도록 합니다.
  • 절대 만료캐시 항목은 정해진 시간에 만료됩니다. 이를 통해 데이터 접근 빈도와 관계없이 오래된 데이터는 자동으로 삭제됩니다.
  • 슬라이딩 만료: 접근 시 만료 시간이 재설정되므로 자주 사용되지만 동적인 데이터에 적합합니다.
  • 지역 기반 구성: 다음을 사용하여 다양한 데이터 영역에 대한 캐싱 동작을 사용자 정의합니다. NCacheNHibernate.xml 설정 파일.
<configuration>
  <application-config application-id="myapp"
                      enable-cache-exception="true"
                      default-region-name="default"
                       key-case-sensitivity="false" >
    <cache-regions>
      <region name="AbsoluteExpirationRegion"
              cache-name="demoCache"
              priority="Default"
              expiration-type="sliding"
              expiration-period="180" />
          <region name="default" 
              cache-name="demoCache" 
              priority="default"
              expiration-type="none" 
              expiration-period="0"/>
    </cache-regions>
  </application-config>
</configuration>

어떻게 NCache NHibernate 데이터를 데이터베이스와 동기화 상태로 유지하려면 어떻게 해야 할까요?

  • 캐시된 데이터를 최신 상태로 유지하기 위해 데이터베이스 변경 사항을 모니터링합니다.
  • SQL Server, Oracle, OLEDB 기반 데이터베이스와 원활하게 작동합니다.
  • 사용 SQL 종속성 기반 무효화 오래된 캐시된 데이터를 제거하거나 새로 고칩니다.
<configuration>
   <application-config application-id="myapp" 
      enable-cache-exception="true" 
      default-region-name="default" 
      key-case-sensitivity="false">

    <database-dependencies>
      <dependency entity-name="nhibernator.BLL.Customer" 
                     type="sql"
sql-statement="SELECT ContactName FROM dbo.Customers WHERE CustomerID =?"                     
                cache-key-format="dependency.customer: [us]"/>
    </database-dependencies>
  </application-config>
</configuration>

NHibernate 쿼리 캐시

  • 쿼리 결과 캐싱: 동일한 데이터베이스 쿼리를 반복적으로 실행하는 것을 줄이기 위해 쿼리 결과를 캐시합니다.
  • 쿼리 저장소: 더 빠른 조회를 위해 NHibernate.QueryCache 영역에 쿼리를 저장합니다.
  • 비동기 작업: 캐시를 비차단 방식으로 업데이트하여 애플리케이션 실행이 지연되지 않도록 보장합니다.
  • 동기화 작업: 데이터베이스가 변경되면 캐시된 데이터를 즉시 업데이트하거나 무효화하여 데이터 일관성을 유지합니다.

애플리케이션 코드에서 쿼리 캐싱 활성화

이 예제에서는 NHibernate 쿼리 캐싱을 활성화하는 방법을 보여줍니다. NCache 성능 향상을 위해 쿼리 결과를 저장하고 재사용합니다.

using (var session = sessionFactory.OpenSession())
{
    using (var transaction = session.BeginTransaction())
    {
        IQuery query = session.CreateQuery("FROM Customer c")
                              .SetCacheable(true);
        var customers = await query.ListAsync<Customer>();

        var newCustomer = new Customer { Name = "John Doe" };
        await session.SaveAsync(newCustomer);

        await session.FlushAsync();
        transaction.Commit();
    }
}

구성 방법 NCache NHibernate로?

설치 NCache NHibernate용 클라이언트

  • 설치 NCache NuGet을 통한 Enterprise용 NHibernate 공급자:
    Install-Package NHibernate.NCache

설치 NCache 서버

구성 NCache NHibernate를 위해

NHibernate 구성 파일을 수정하여 활성화하세요. NCache 2차 캐시 제공자로서.

hibernate.cfg.xml 업데이트

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="cache.provider_class">
      Alachisoft.NCache.Integrations.NHibernate.Cache.NCacheProvider,
      Alachisoft.NCache.Integrations.NHibernate.Cache
    </property>
    <property name="cache.use_second_level_cache">true</property>
  </session-factory>
</hibernate-configuration>

다음에 무엇을할지?

자주 묻는 질문 (FAQ)

NCache NHibernate의 기본(L1) 캐시에 대한 분산형 멀티노드 대안을 제공합니다. L1은 단일 세션으로 제한되지만, NCache 이 기능을 사용하면 애플리케이션이 웹 팜 전체에서 캐시된 데이터를 공유할 수 있으므로 데이터베이스 접근 횟수를 최대 90%까지 줄이고 트래픽이 많은 시간대에 데이터베이스 병목 현상을 방지할 수 있습니다.

예. NCache NHibernate 쿼리 캐싱을 완벽하게 지원하여 비용이 많이 드는 SQL 쿼리 결과를 분산 캐시에 저장합니다. 이를 통해 동일한 매개변수를 사용하여 동일한 쿼리를 다시 실행할 때 데이터베이스에 접근하지 않도록 하여 애플리케이션 지연 시간을 크게 개선합니다.

NCache 데이터베이스 동기화 기능을 통해 100% 데이터 일관성을 유지합니다. SQL 종속성(SqlCacheDependency) 또는 Oracle 종속성을 사용하면, NCache 기본 데이터베이스 데이터가 변경될 때마다 오래된 캐시 항목을 자동으로 무효화하고 제거하여 애플리케이션이 항상 최신 정보를 제공하도록 보장합니다.

코드 변경이 필요하지 않습니다. NCache 는 플러그 앤 플레이 방식의 L2 캐시 제공업체입니다. 통합은 설정을 수정하는 것만으로 완전히 처리됩니다. 최대 절전 모드.cfg.xml or 앱 구성 가리킬 파일 NCache 공급자 공장.

대부분의 NHibernate 환경에서는 성능과 고가용성의 균형이 가장 잘 맞는 파티션-복제본 토폴로지를 권장합니다. 읽기 작업이 많은 워크로드의 경우, 클라이언트 캐시(Inproc) 기능을 활성화하여 데이터의 일부를 애플리케이션 메모리에 직접 저장함으로써 캐시에 가까운 속도를 구현할 수 있습니다.

문의하기

전화

+1 214-619-2601 (미국)

© 저작권 Alachisoft 2002 - . 판권 소유. NCache 는 Diyatech Corp.의 등록상표입니다.