NHibernateは、人気のオブジェクトリレーショナルマッピング(ORM)フレームワークです。 .NETアプリケーションは、オブジェクト指向コードを通じてシームレスなデータベース操作を可能にします。ただし、アプリケーションが大量のトランザクション負荷を処理する場合、頻繁なデータベースクエリが原因でパフォーマンスのボトルネックが発生することがよくあります。
この問題に対処するために、NHibernate は第 2 レベル キャッシュを提供します。これにより、オブジェクトがアプリケーション レベルでメモリ内に保持され、データベースに繰り返しアクセスする必要性が軽減されます。 NCache非常に高速でスケーラブルな分散キャッシュである NHibernate 2 次キャッシュ プロバイダーは、アプリケーションの速度、スケーラビリティ、信頼性を大幅に向上させます。
NCache NHibernate向けの高性能な分散型第2レベル(L2)キャッシュを提供し、.NETアプリケーションにおけるデータベースのボトルネックを解消します。線形スケーラビリティ、ピアツーピアクラスタリングによる100%の稼働率を実現し、統合時にコード変更は一切不要です。
NCache 以下に説明するように、クエリの高速化、データベース負荷の軽減、高可用性により NHibernate が強化されます。
| 機能 | NHibernate L1 (セッションキャッシュ) | NCache (分散L2キャッシュ) |
|---|---|---|
| スコープと分離 | トランザクションスコープ。データは単一の Iセッション オブジェクト。 | プロセス全体/クラスター全体。データは、Web ファーム内のすべてのセッションとすべてのサーバー間で共有されます。 |
| データの永続性 | 一時的。セッションが閉じられるか、リクエストが終了するとすぐにオブジェクトは破棄されます。 | 永続的なインメモリ。データは、アプリケーションの再起動やセッションの終了とは関係なく、キャッシュ クラスター内に保存されます。 |
| 拡張性 | インプロセスのみ。単一の Web サーバーのメモリによって制限されるため、ファーム全体で共有することはできません。 | 線形スケーラビリティ。キャッシュ サーバーを動的に追加して、ストレージ容量とスループットを向上させることができます。 |
| データベース同期 | なし。L1 には、別のプロセスが DB を更新したかどうかを認識するメカニズムはありません。 | 自動同期。用途 SqlCacheDependency、Oracle 依存性、またはポーリングを使用して、古いデータを無効化します。 |
| クエリのキャッシュ | 該当なし (L1 は主に ID ベースの検索用です)。 | サポートされています。複雑なクエリの結果をキャッシュして、コストのかかる SQL 実行の繰り返しを回避します。 |
以下は、主な機能の一部です。 NCache NHibernate ユーザーに提供するもの:
<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>
<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クエリキャッシュを有効にする方法を示します。 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();
}
}
Install-Package NHibernate.NCache
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>
©著作権 Alachisoft 2002 - . All rights reserved. NCache はダイヤテック株式会社の登録商標です。