NHibernate は、データベース プログラミングを簡素化するため、.NET アプリケーションの一般的なオブジェクト リレーショナル マッピング (ORM) ソリューションです。 その結果、トラフィックの多いアプリケーションの多くが NHibernate を使用するため、データベースのスケーラビリティのボトルネックに直面します。
これに対処するために、NHibernate はキャッシュ インフラストラクチャを提供します。これにより、アプリケーションは代わりにインメモリ キャッシュ ストアを使用し、そのような高い要求負荷でデータベースが使い果たされるのを防ぐことができます。 Hibernate キャッシングには、第 XNUMX レベルのキャッシュと第 XNUMX レベルのキャッシュが含まれます。
NCache 詳細 NHibernateキャッシング-ドキュメント DapperMicro-ORMを NCache
NHibernateの第XNUMXレベルのキャッシュとその制限
NHibernate First Level (第 1 レベル) キャッシュは、セッション オブジェクトに関連付けられた基本的なスタンドアロン (インプロセス) キャッシュを提供し、現在のセッションのみに限定されます。 デフォルトでは、この第 1 レベルのキャッシュは、セッションごとのデータベースに対する SQL クエリの数を減らします。 ただし、この第 1 レベルのキャッシュには次のような多くの制限があります。
- 各プロセスには独自の第 1 レベル キャッシュがあり、他の第 1 レベル キャッシュとは同期されないため、データの整合性に問題が生じます。
- キャッシュサイズはプロセスメモリに制限されており、拡張できません。
- ワーカー プロセスのリサイクルにより、キャッシュがフラッシュされます。 次に、それをリロードする必要があるため、アプリケーションのパフォーマンスが低下します。
NCache 詳細 DBをNHibernateと同期する NHibernateクエリキャッシング
解決策:NHibernateの分散キャッシュ
NHibernateの第XNUMXレベルのキャッシュはSessionFactoryに存在します レベル。これは、複数のユーザーセッションが共有キャッシュにアクセスできることを意味します。 さらに、NHibernateの第2レベルのキャッシュにはプラグ可能なアーキテクチャがあるため、プログラミングなしでサードパーティの分散キャッシュをプラグインできます。 NCache 実装済み NHibernateの第XNUMXレベルのキャッシュプロバイダー コードを変更することなく、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 すべてのキャッシュ サーバーのメモリを一緒にプールします。 そのため、キャッシュ クラスターにサーバーを追加するだけで、キャッシュ サイズを増やすことができます。 これは、キャッシュが数百ギガバイト、さらにはテラバイトにまで拡大できることを意味します。
- アプリケーションプロセスのリサイクルはキャッシュに影響しません。 すべてのデータがアウトプロセス分散キャッシュにあるため、アプリケーション プロセスはステートレスになります。 したがって、アプリケーション プロセスのリサイクルはキャッシュに影響しません。
- より大きなトランザクション負荷を処理するための線形スケーラビリティ: データベースがボトルネックになることを心配することなく、より大きなトランザクション負荷を管理できます。 このパフォーマンスが可能なのは、分散キャッシュが直線的にスケーリングし、データベース トラフィックを最大 90% 削減するためです。
- クライアントキャッシュを使用して、データを処理中に保存します。 NCache は、ワーカー プロセス内で実行されるクライアント キャッシュ、同期されたローカル キャッシュ、またはキャッシュ オン トップ オブ キャッシュのサポートを提供します。 これを使用して、NHibernate アプリケーション内でより多くのパフォーマンスを達成できます。
NCache 詳細 Hibernate & NCache NHibernate Cache-Video
結論!
ご覧のとおり、次のような分散キャッシュ NCache NHibernateを使用しながら、マルチサーバー構成でアプリケーションを実行できるようにします。 を使用して、アプリケーションをスケーリングし、高いトランザクション負荷を処理することもできます。 NCache NHibernateの第60レベルのキャッシュとして。 完全に機能するXNUMX日間の試用版をダウンロードする NCache Enterprise 自分で試してみてください。