Entity Framework (EF) コアキャッシュ

100%ネイティブ.NET (業界唯一の)

NCache は、Entity Framework Core (EF Core) 用の分散型インメモリキャッシュプロバイダーであり、クエリ結果をキャッシュすることでデータベースのボトルネックを解消します。ただし、いくつかの制限があります。高トランザクションの EF Core アプリケーションでは、データベースクエリが多すぎるため、データベース層でパフォーマンスの問題が発生する可能性があります。アプリケーション層は水平方向にスケーリングできますが、データベース層がボトルネックとなります。

NCacheは、100% ネイティブの .NET 分散キャッシュであり、頻繁にアクセスされるデータをキャッシュし、データベース クエリをオフロードすることで、EF Core アプリケーションを強化します。これにより、パフォーマンスとスケーラビリティが向上し、データベース全体の負荷が軽減されます。

なぜ使うの? NCache EFコアキャッシュとして?

  • パフォーマンスの向上: 読み取り集中型のワークロードにおけるデータベースへの接続を80~90%削減し、ミリ秒未満の応答時間を確保します。また、トランザクションデータと参照データの両方をキャッシュします。インプロセスキャッシュ用のクライアントキャッシュも搭載しており、頻繁にアクセスされるデータをアプリケーションメモリから提供することで、レイテンシを最小限に抑えます。
  • 線形スケーラビリティ: アプリケーションの負荷が増加すると、マルチサーバー展開をサポートすることで水平スケーリングを提供し、一貫したパフォーマンスを保証します。
  • 高可用性: インテリジェントなデータレプリケーションを実装します。 パーティション-レプリカ, ミラーリング, 複製されたキャッシュ自己修復機能を提供し、分散キャッシュ クラスターにより 100% の稼働率を保証します。
  • 100% ネイティブ .NET: NCache .NETおよびEF Coreアプリケーション向けに特別に設計されており、 EF Core 拡張メソッド 直接的な EF Core キャッシュ API を提供します。

拡張メソッドによる EF Core キャッシュ

NCache 拡張する EFコア C# 拡張メソッドを使用すると、既存のロジックを変更することなくシームレスなキャッシュが可能になります。

トランザクションデータをキャッシュする方法(FromCache)

トランザクションデータには、顧客情報、注文、取引など、頻繁に変更されるレコードが含まれます。これらの頻繁にアクセスされるデータを短期的にキャッシュすることで、データベースクエリが削減され、応答時間が短縮され、競合が最小限に抑えられます。

  • メソッド: FromCache(), FromCacheAsync()

    • キャッシュから(): クエリ結果が利用可能な場合はキャッシュから取得し、そうでない場合はデータベースから取得して、将来使用するために結果をキャッシュに保存します。 FromCache() Group By、Order By Ascending、Order By Descending、Sum、Min、Max、Average、Count、Contains、Like、FirstOrDefault 関数をサポートします。

      var resultSet = (from cust in context.Customers
      	where cust.CustomerId == someCustomerId
      	select cust).FromCache(options).ToList();

参照データをプリロードする方法(LoadIntoCache)

参照データには、製品カタログや参照値など、比較的静的なデータセットが含まれます。これらのデータを長期キャッシュすることで、冗長なデータベースクエリが排除され、アプリケーションの速度が向上します。

  • メソッド: LoadIntoCache(), LoadIntoCacheAsync()

    • LoadIntoCache(): データセット全体をキャッシュにロードし、後続のクエリでデータベースではなくキャッシュから直接データを取得できるようにします。

      var resultSet = (from custOrder in context.Orders
      	where custOrder.Customer.CustomerId == someCustomerId
      	select custOrder).LoadIntoCache(out string cacheKey, options);

キャッシュされた参照データのクエリ

キャッシュから参照データを直接取得すると、アプリケーションはデータベース クエリを回避でき、応答時間が向上します。ただし、正確な結果を確保し、不完全なクエリ応答を回避するには、データセット全体をキャッシュに事前にロードする必要があります。 (データベース呼び出しなしでキャッシュから直接データを取得する).

  • メソッド: FromCacheOnly(), FromCacheOnlyAsync()

    • FromCacheOnly(): クエリ結果をキャッシュからのみ取得し、データベースへのクエリは行いません。これにより、プリロードされたデータセットの参照が超高速になります。ただし、これを効果的に機能させるには、クエリの精度を維持するために、データセット全体がキャッシュされている必要があります。

      var resultSet = (from cust in context.Customers
      	where cust.CustomerId == someCustomerId
      	select cust).FromCacheOnly();

直接 API アクセス用のキャッシュ ハンドル

NCache EF Coreの拡張メソッドのみに依存せずに、キャッシュされたエンティティを効率的に管理するための直接APIを提供します。このキャッシュAPIを使用すると、開発者はプログラムによってキャッシュ内のオブジェクトを挿入、更新、削除できるため、キャッシュの動作を細かく制御しながら、高パフォーマンスアプリケーションのデータ取得を最適化できます。

  • キャッシュ内でエンティティを直接挿入、削除、更新します。

    ICache cache = CacheManager.GetCache(cacheName);
    // Inserting an entity into cache
    cache.Insert(customerKey, cacheItem);

EF Core の高度なキャッシュ機能

集計の遅延クエリ実行

遅延クエリ実行により、アプリケーションは次のような集計関数を実行できます。 カウント(), 和(), 平均() データベースを繰り返しクエリするのではなく、キャッシュされたデータに直接アクセスします。この機能は、CountやSumなどの集計をインメモリキャッシュ内で直接実行することで、大規模なデータセットをクライアントにフェッチする際のネットワークオーバーヘッドを排除します。これにより、冗長なクエリが削減され、パフォーマンスが向上し、高トランザクション環境でのデータ取得が高速化されます。

  • 次のような集計クエリ結果のキャッシュを有効にします。 カウント(), 和(), 平均().
  • 計算結果をキャッシュすることで冗長なデータベース呼び出しを削減します。
    using (var context = new NorthwindContext())
    {
       var resultSet  = context.Products
         .Where(p => p.UnitPrice == 10)
    	  .GroupBy(p => p.ProductName)
    	  .Select(group => group.Key)
    	  .FromCache(out cacheKey, options)
    	  .ToList();
    }

LINQ-to-Cache: キャッシュ上で直接 LINQ クエリを実行する

NCache アプリケーションはキャッシュされたデータに対してLINQクエリを直接実行できるため、データベースクエリを繰り返す必要がなくなります。インメモリ処理を活用することで、このアプローチはクエリパフォーマンスを大幅に向上させ、データベース負荷を軽減します。データベースにアクセスすることなく、キャッシュされたデータに対してLINQクエリを直接実行できます。

using (var context = new NorthwindContext())
{
    var result = context.Customers
        .Where(b => (b.CompanyName.Contains("Alfreds Futterkist")))
        .FromCacheOnly()
}

キャッシュオプション: キャッシュ戦略を微調整する

NCache 開発者がアプリケーションの要件に基づいてキャッシュの動作をカスタマイズできるキャッシュ オプションを提供します。これにより、データ ストレージをより適切に制御し、有効期限ポリシーを設定し、自動無効化のための SQL 依存関係の追跡を有効にし、効率的な取得のためにキャッシュにデータを保存する方法を定義できるようになります。

  • 静的データ (製品カタログなど) の絶対有効期限とアクティブ セッションのスライド有効期限を使用してキャッシュの動作を制御し、データが使用されている間のみ使用可能であることを保証します。
  • 対応するデータベース行が変更されるたびにキャッシュ エントリを自動的に無効にすることで、古いデータの問題を解決するための SQL 依存関係の追跡をサポートします。
    var options = new CachingOptions
    {
        QueryIdentifier = "CustomerEntity",
        CreateDbDependency = true,
        StoreAs = StoreAs.SeperateEntities,
        Priority = Runtime.CacheItemPriority.High
    };
    options.SetAbsoluteExpiration(DateTime.Now.AddSeconds(20));

組み込みのログ記録と監視

NCache キャッシュの使用状況を追跡し、パフォーマンスメトリックを測定し、潜在的な問題をリアルタイムで検出するためのログ記録および監視機能が組み込まれています。Microsoft.Extensions.Loggingとシームレスに統合されているため、開発者はキャッシュの動作を分析し、問題をトラブルシューティングし、パフォーマンスを効率的に最適化できます。

  • キャッシュされた EF Core 操作のリアルタイム監視を提供します。
  • 詳細なログのために Microsoft.Extensions.Logging と完全に統合されます。

はじめに NCache

インストールを開始する NCache EF Core のクライアント

  • NuGet を使用して必要なパッケージをインストールします。
    Install-Package EntityFrameworkCore.NCache

インストールを開始する NCache サーバー

  • インストールを開始する NCache 2 台のサーバーで分散キャッシュ クラスターを作成します。
  • 2ノードを構成する NCache クラスター NCache 管理センター。

構成 NCache EFコアで

  • 追加 NCache DbContextへの設定。以下の設定は、 接続再試行回数これにより、アプリケーションとキャッシュ クラスター間の一時的なネットワーク障害時にアプリケーションがクラッシュするのを防ぎます。
    public partial class NorthwindContext : DbContext
    {
    ...
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
     {
         // Parameters specified in App.config
         string cacheId = ConfigurationManager.AppSettings["CacheId"];
         string connString = ConfigurationManager.AppSettings["ConnString"];
         bool errorEnabled = bool.Parse(ConfigurationManager.AppSettings["ErrorEnabled"]);
         int bulkInsertChunkSize = Int32.Parse(ConfigurationManager.AppSettings["BulkInsertChunkSize"]);
         // Configure cache with connection retries and security
         var options = new CacheConnectionOptions();
         options.RetryInterval = TimeSpan.FromSeconds(3);
         options.ConnectionRetries = 2;
         options.ServerList = new List<ServerInfo>()
         {
             new ServerInfo("20.200.20.XX", 9800)
         };
         // Configure cache with security
         options.UserCredentials = new Credentials("john_smith", "12345");
         NCacheConfiguration.Configure(cacheId, DependencyType.SqlServer, options, errorEnabled, bulkInsertChunkSize);
         optionsBuilder.UseSqlServer(connString);
     }
    }

次はどうする?

よくある質問(FAQ)

NCache SQL依存性とOracle依存性を使用して、古いデータの問題を解決します。有効にすると、 NCache データベースの変更を追跡し、対応するキャッシュ エントリを自動的に無効化または削除して、キャッシュとデータベース間のデータの一貫性を確保します。

  • FromCache() トランザクションデータ(顧客注文など)に最適です。まずキャッシュをチェックし、データが不足している場合にのみデータベースにクエリを実行し、不足しているデータをキャッシュに追加します。
  • LoadIntoCache() 参照データ(製品カタログなど)に最適です。データセット全体を事前にキャッシュにロードすることで、後続のクエリは超高速になり、データベースにアクセスする必要がありません。

Yes. NCache 遅延クエリ実行をサポートしており、メモリ内にキャッシュされたデータに対して集計関数(Count、Sum、Average、Min、Max)を直接実行できます。これにより、単純な計算を実行するためだけにクライアントに大規模なデータセットを取得することによるネットワークオーバーヘッドが排除されます。

一時的なネットワーク障害時にアプリケーションがクラッシュするのを防ぐには、 接続再試行回数 自分で キャッシュ接続オプションこの設定は、 NCache クライアントは例外をスローする前に失敗した接続試行を自動的に再試行し、アプリケーションの回復力を確保します。

NCache EF Coreの高度にスケーラブルな分散型2次キャッシュとして機能します。単一のサーバーのメモリに制限されるデフォルトのローカルキャッシュとは異なり、 NCache キャッシュされたデータをサーバーのクラスター全体に分散し、メモリ制限やデータの不整合の問題なしにアプリケーションを水平方向に拡張できるようにします。

お問い合わせ

電話

+1 214-619-2601 (米国)

+44 20 7993 8327 (英国)

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