EntityFrameworkの第XNUMXレベルのキャッシュと NCache

Entity Framework は、.NET 向けの Microsoft オブジェクト・リレーショナル・マッピング・フレームワークとして実証されています。ドメインオブジェクトを通じてリレーショナルデータを操作できます。また、Entity Framework を使用することで、データベースの永続化に必要なコードのほとんどを不要にすることができます。

Entity Frameworkは、パフォーマンスとスケーラビリティが重要となる、トランザクション数の多いアプリケーションで使用されます。しかし、これらのアプリケーションの多くでは、データベースがすぐにボトルネックになります。アプリケーション層では必要に応じてアプリケーションサーバーを追加できますが、データベース層では同じことはできません。

このスケーラビリティを実現する唯一の方法は、次のような分散キャッシュを使用することです。 NCache.NETアプリケーション向けの極めて高速でスケーラブルな分散キャッシュです。アプリケーションデータをキャッシュし、コストのかかるデータベースへの接続を削減し、アプリケーションのパフォーマンスとスケーラビリティを向上させます。

Entity Frameworkの2次キャッシュ(L2キャッシュ)は、異なるデータベースコンテキストやユーザーセッション間でデータを保持するキャッシュパターンです。Entity Framework 6.x(Classic)ではこの機能はネイティブには提供されていませんが、 NCache カスタムADO.NETプロバイダーとしてプラグインします。これにより、クエリを分散クラスターにオフロードできるため、コードを変更することなく、線形スケーラビリティと100%の稼働率を確保できます。

なぜ使うの? NCache Entity Framework の 2 次キャッシュとして?

Entity Frameworkアプリケーションがマルチサーバー環境で実行されている場合は、Entity Frameworkの2次キャッシュとして分散キャッシュが必要です。そして、 NCache は、マルチサーバー構成に最適なオプションであり、次の理由からこれを使用する必要があります。

  1. NCache 非常に高速です: NCache 1 ミリ秒未満の応答時間を実現します。
  2. NCache 線形スケーラビリティを提供します。 NCache スケーラビリティのボトルネックになることはありません。 これにより、サーバーをキャッシュクラスターに追加して、線形スケーラビリティを実現し、極端なトランザクション負荷を処理できます。
  3. キャッシュサイズは無限に大きくなる可能性があります。 NCache キャッシュパーティショニングを提供し、すべてのキャッシュサーバーのメモリをプールします。そのため、クラスターにサーバーを追加するだけでキャッシュサイズを増やすことができます。
  4. NCache データをインテリジェントに複製します。 NCache パフォーマンスを損なうことなく、キャッシュをインテリジェントに複製できます。そのため、キャッシュサーバーがダウンした場合でも、キャッシュデータが失われることはありません。
  5. NCache 100%の稼働時間を提供します: NCache 単一障害点のない自己修復型の動的キャッシュクラスターを備えています。そのため、アプリケーションやキャッシュを停止することなく、実行時にキャッシュサーバーを追加または削除できます。

EF L2 キャッシュの理想的なシナリオ:

  • 参考データ: 静的ルックアップ テーブル (製品、国など) をキャッシュして、冗長な SQL 読み取りを排除します。
  • 高トラフィックの読み取り操作: カタログまたはリストページのデータベース負荷を軽減します。
  • セッションに依存しないデータ: 標準の InProc キャッシュが失敗する複数の Web サーバー間で状態を共有します。

設定方法 NCache Entity Framework の 2 次キャッシュ (コードは不要です)

使用についての最もよい事 NCache Entity Frameworkの利点は、ユーザー側でプログラミングが不要なことです。アプリケーションの構成ファイルを変更し、インターセプターを追加するだけで済みます。 セクションを追加し、invariantNameとtypeの設定を上書きします。以下は app.config 変更点:

<entityFramework>
    <providers>
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
    <interceptors>
        <interceptor type="Alachisoft.NCache.Integrations.EntityFramework.Caching.EFCommandInterceptor, Alachisoft.Integrations.EntityFramework.CachingProvider"/>
    </interceptors>
</entityFramework>

分析モードとキャッシングモードを使用する

その NCache Entity Framework のセカンドレベルキャッシュプロバイダーは、カスタム ADO.NET プロバイダーとしてプラグインされます。このプロバイダーを使用すると、分析モードで実行でき、アプリケーションが Entity Framework に発行するさまざまなクエリをすべてログに記録できます。これらのクエリは、分析モード中にクエリが呼び出された回数とともにファイルに記録されます。以下に例を示します。

<analysis-report>
 <query>
      <!--Call count = 12-->
      <cache-query query-text="SELECT [Extent1].[ProductID] AS [ProductID], 
		[Extent1].[ProductName] AS [ProductName], 
		[Extent1].[SupplierID] AS [SupplierID], 
		[Extent1].[CategoryID] AS [CategoryID], 
		[Extent1].[QuantityPerUnit] AS [QuantityPerUnit], 
		[Extent1].[UnitPrice] AS [UnitPrice], 
		[Extent1].[UnitsInStock] AS [UnitsInStock], 
		[Extent1].[UnitsOnOrder] AS [UnitsOnOrder], 
		[Extent1].[ReorderLevel] AS [ReorderLevel], 
		[Extent1].[Discontinued] AS [Discontinued] FROM 
		[dbo].[Products] AS [Extent1] 
		WHERE 5 = [Extent1].[ProductID]"/>
      <cache-policy vary-by-cache-param="" 
		expiration-type="Absolute" 
		enabled="True" 
		expiration-time="30sec" 
		dbsyncdependency="False" 
		resyncProviderName="EFResync"/>
    </query>
</analysis-report>

これにより、キャッシュするクエリとその期間を決定できます。 一部またはすべてのクエリに対してデータベース同期を指定することもできます。

NCache Entity Framework の 2 次キャッシュの機能

プラグを差し込むことによって NCache Entity Frameworkのセカンドレベルキャッシュプロバイダをapp.configファイルに追加することで、アプリケーションにエンタープライズレベルの分散キャッシュを導入できます。主な機能は以下のとおりです。 NCache EntityFrameworkアプリを提供します。

  1. キャッシュをデータベースと同期します。 キャッシュ内のデータの中には、アプリケーションが認識しないままデータベース上で変更されるものがあります。そのようなデータについては、対応するクラスを指定できます。 NCache データベースの同期 機能。これにより、 NCache その後、データベースに接続し、データの変更を監視し、キャッシュを自動的に更新します。これにより、キャッシュ内のデータは常にデータベースと同期されます。 NCache は、大阪で Sql依存性 SQL Serverの場合、 Oracleの依存関係 Oracleの場合、 Db依存関係 OLEDB 準拠のデータベースの場合。
  2. 絶対有効期限: 絶対有効期限 in NCache キャッシュされたアイテムごとに個別に指定されます。日時値を使用して、 NCache 自動的にアイテムを無効化します。Entity Frameworkの場合、 NCache 「間隔」値を指定するように要求し、「Now() + 間隔」式を使用して絶対有効期限の日時値を計算します。
  3. スライドの有効期限: スライド有効期限 in NCache は、キャッシュされた項目ごとに個別に指定され、間隔値です。 NCache キャッシュされたアイテムが指定された期間内に取得も更新もされていない場合、そのアイテムは期限切れとなります。この期間は NCache EntityFrameworkの第XNUMXレベルのキャッシュプロバイダー構成ファイル。
  4. コンパクトなシリアル化: .NET オブジェクトをアウトプロセスキャッシュまたは分散キャッシュにキャッシュする場合は、必ず最初にシリアル化する必要があります。通常の .NET シリアル化は、実行時に .NET リフレクションを使用するため、処理速度が遅くなります。 NCache クラスを登録する方法を提供します NCacheアプリケーションがキャッシュに接続すると、シリアル化コードが生成されます。このコードはメモリ内でコンパイルされ、シリアル化に使用されます。これは通常の.NETシリアル化よりも約10倍高速です。この機能はEntity Frameworkで使用できます。エンティティクラスを NCache コンパクト連載用。

使い方 NCache EntityFrameworkアプリケーションから直接

ただし、 NCache Entity Frameworkの2次キャッシュは非常に高速で簡単ですが、限られたセットしか提供しません。 NCache 特徴。その理由は、 NCache カスタムADO.NETプロバイダーとしてプラグインされ、SQLクエリレベルで処理する必要があるという制約があります。 NCache Entity Framework の第 2 レベル キャッシュ プロバイダーとして使用する場合、使用できない機能があります。

あなたのための代替手段は使用することです NCache Entity Framework アプリケーション内から直接作成することで、 NCache API Entity Framework以外の.NETアプリケーションと同様に、呼び出しは可能です。この方法を採用するには多少のプログラミング作業が必要ですが、そのメリットが追加のプログラミング作業を上回ると判断されるかもしれません。

NCache Entity Framework の 2 次キャッシュに欠けている機能

以下は、Entity Frameworkの第XNUMXレベルのキャッシュとして使用した場合と、使用した場合に見落とす可能性のある機能のリストです。 NCache アプリケーションから直接。

機能カテゴリ 機能 EF キャッシュ プロバイダー (コードなし) NCache ダイレクトAPI
高度な操作 一括操作 使用できない 利用できます
グループ化と検索 タグ (NAIST) と 名前付きタグ 使用できない 利用できます
クエリ SQL LINQ検索 使用できない 利用できます
並行性 ロッキング アイテムのロック解除 使用できない 利用できます
統合性 キャッシュアイテムのバージョン管理 使用できない 利用できます
情報元 リードスルー / ライトスルー / 後書き 使用できない 利用できます
メッセージング イベント通知 (アイテム、一般、カスタム) 使用できない 利用できます
メンテナンス キャッシュローダーとリフレッシャー 使用できない 利用できます

次はどうする?

よくある質問(FAQ)

NCache 標準のEntity FrameworkプロバイダーをラップするカスタムADO.NETプロバイダーを実装します。EFによって生成されたデータベースクエリをインターセプトし、その結果セットを分散キャッシュにキャッシュします。同じクエリが再度実行されると、結果はデー​​タベースを経由せずにキャッシュから直接提供されます。

いいえ、使用します NCache Entity Frameworkの2次キャッシュはコードの変更を必要としません。app.configまたはweb.configファイルを変更するだけで、 NCache プロバイダーを選択し、インターセプターを構成します。

Yes. NCache SqlDependency(SQL Server用)、OracleDependency、DbDependencyを使用したデータベース同期をサポートします。これにより、サードパーティ製アプリケーションによってデータベースのデータが更新された場合、対応するキャッシュアイテムが自動的に無効化され、データが古くなるのを防ぎます。

いいえ、この特定のプロバイダーは Entity Framework 6.x (Classic) 用に設計されています。.NET Core アプリケーションの場合は、 NCache 拡張メソッドやカスタム キャッシュ オプションなどの高度な機能をサポートする Entity Framework Core (EF Core) キャッシュ プロバイダー。

お問い合わせ

電話

+1 214-619-2601 (米国)

+44 20 7993 8327 (英国)

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