NHibernateの第XNUMXレベルのキャッシュ

NHibernateは、人気のオブジェクトリレーショナルマッピング(ORM)フレームワークです。 .NETアプリケーションは、オブジェクト指向コードを通じてシームレスなデータベース操作を可能にします。ただし、アプリケーションが大量のトランザクション負荷を処理する場合、頻繁なデータベースクエリが原因でパフォーマンスのボトルネックが発生することがよくあります。

この問題に対処するために、NHibernate は第 2 レベル キャッシュを提供します。これにより、オブジェクトがアプリケーション レベルでメモリ内に保持され、データベースに繰り返しアクセスする必要性が軽減されます。 NCache非常に高速でスケーラブルな分散キャッシュである NHibernate 2 次キャッシュ プロバイダーは、アプリケーションの速度、スケーラビリティ、信頼性を大幅に向上させます。

NCache NHibernate向けの高性能な分散型第2レベル(L2)キャッシュを提供し、.NETアプリケーションにおけるデータベースのボトルネックを解消します。線形スケーラビリティ、ピアツーピアクラスタリングによる100%の稼働率を実現し、統合時にコード変更は一切不要です。

どのように NCache NHibernate アプリケーションのパフォーマンスを向上させますか?

NCache 以下に説明するように、クエリの高速化、データベース負荷の軽減、高可用性により NHibernate が強化されます。

  • パフォーマンス: 頻繁にアクセスされるデータをメモリ内に保存することで、データベースへの接続回数が最大90%削減され、クエリ実行速度と応答性が向上します。これにより、複数のウェブサーバーからの繰り返し読み取りリクエストをデータベースが処理できない「データベースチョークポイント」が解消され、データベース負荷を最小限に抑えながらアプリケーション層を線形に拡張できます。社内ベンチマークでは、 NCache 1 ミリ秒未満の遅延で 1 秒あたり 200 万回以上の操作を処理できます。
    • クライアントキャッシュ: これにより、アプリケーションは独自のメモリからキャッシュされたデータの最も頻繁に使用されるサブセットにアクセスできるようになり、ネットワーク呼び出しが削減され、パフォーマンスがさらに向上します。
    • コンパクトなシリアル化: NCache 効率的なシリアル化とデシリアル化を保証する コンパクトなシリアル化標準の .NET シリアル化よりもデータの取得が大幅に高速化されます。
  • 線形スケーラビリティ: NCache キャッシュサーバーを追加することで、アプリケーションを動的に拡張できます。また、クラスター環境においてキャッシュ負荷が均等に分散されることも保証します。
  • 高可用性: NCacheピアツーピア クラスタリングによりダウンタイムがなくなり、自動フェイルオーバーとレプリケーションによりデータ損失が防止され、キャッシュの一貫性が維持されます。 NCache 次のような複数のキャッシュ トポロジを通じてインテリジェントなデータ レプリケーションを提供します。
  • 一般的な使用例 NCache NHibernate L2 キャッシュ:
    • 高トラフィックのウェブファーム: データベースの競合なしで、複数のサーバーにわたって .NET アプリケーションをスケーリングします。
    • リアルタイムのデータ一貫性: SQL 依存関係を使用してキャッシュを外部データベースの変更と同期します。
    • レガシーシステムの近代化: プラグアンドプレイ プロバイダーを使用して既存の NHibernate アプリのパフォーマンスを向上します。

技術比較: NHibernate L1 と NCache L2

機能 NHibernate L1 (セッションキャッシュ) NCache (分散L2キャッシュ)
スコープと分離 トランザクションスコープ。データは単一の Iセッション オブジェクト。 プロセス全体/クラスター全体。データは、Web ファーム内のすべてのセッションとすべてのサーバー間で共有されます。
データの永続性 一時的。セッションが閉じられるか、リクエストが終了するとすぐにオブジェクトは破棄されます。 永続的なインメモリ。データは、アプリケーションの再起動やセッションの終了とは関係なく、キャッシュ クラスター内に保存されます。
拡張性 インプロセスのみ。単一の Web サーバーのメモリによって制限されるため、ファーム全体で共有することはできません。 線形スケーラビリティ。キャッシュ サーバーを動的に追加して、ストレージ容量とスループットを向上させることができます。
データベース同期 なし。L1 には、別のプロセスが DB を更新したかどうかを認識するメカニズムはありません。 自動同期。用途 SqlCacheDependency、Oracle 依存性、またはポーリングを使用して、古いデータを無効化します。
クエリのキャッシュ 該当なし (L1 は主に ID ベースの検索用です)。 サポートされています。複雑なクエリの結果をキャッシュして、コストのかかる SQL 実行の繰り返しを回避します。

主な特徴 NCache NHibernate用

以下は、主な機能の一部です。 NCache NHibernate ユーザーに提供するもの:

コード変更は必要ありません

  • と簡単に統合 Hibernate 既存のアプリケーション コードを変更することなく、プラグ アンド プレイ ソリューションとして使用できます。
  • すべての構成は、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 Hibernate を使用しますか?

インストールを開始する 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 アプリケーションが Web ファーム全体でキャッシュされたデータを共有できるようにすることで、データベースへの接続を最大 90% 削減し、トラフィックのピーク時にデータベースのボトルネックを防ぐことができます。

Yes. NCache NHibernate Query Caching を完全にサポートしています。これは、高負荷なSQLクエリの結果を分散キャッシュに保存する機能です。これにより、同じパラメータを持つ同じクエリを複数回実行してもデータベースへの負荷が軽減され、アプリケーションのレイテンシが大幅に改善されます。

NCache データベース同期機能により、100% のデータ一貫性を維持します。SQL 依存関係 (SqlCacheDependency) または Oracle 依存関係を使用することで、 NCache 基盤となるデータベース データが変更されるたびに、キャッシュされた古いアイテムが自動的に無効化および削除され、アプリケーションが常に最新の情報を提供できるようになります。

コードを変更する必要はありません。 NCache プラグアンドプレイのL2キャッシュプロバイダです。統合は、設定の変更のみで行えます。 hibernate.cfg.xml or app.config ファイルにポイントする NCache プロバイダーファクトリー。

ほとんどのNHibernate環境では、パフォーマンスと高可用性のバランスが最も優れているため、パーティション・レプリカ・トポロジが推奨されます。読み取り集中型のワークロードでは、クライアント・キャッシュ(Inproc)機能を有効にして、データのサブセットをアプリケーションのメモリに直接保存することで、「ニアキャッシュ」速度を実現できます。

お問い合わせ

電話

+1 214-619-2601 (米国)

+44 20 7993 8327 (英国)

©著作権 Alachisoft 2002 - . All rights reserved. NCache はダイヤテック株式会社の登録商標です。