最近では、多くの企業が、ピーク時に大量のトランザクションおよび参照データを処理する処理能力を必要としています。 たとえば、休暇中に顧客のトランザクションを処理する銀行。 ただし、大きな課題は、アプリケーションのパフォーマンスを妨げることなくこのデータを処理することです。 一般に、アプリケーション層は直線的に拡張できますが、データベースはそうではありません。 トランザクションの負荷が高いと、データベースのボトルネックが発生し、システムが圧倒される可能性があります。 このボトルネックは、インメモリ分散キャッシュを .NET アプリケーションに導入してデータ アクセスを高速化することで解決できます。
インメモリ分散キャッシュは複数のサーバーにまたがりますが、単一のキャッシュ インスタンスとして機能し、それを使用するアプリケーションに対して透過的です。 アクティブなデータまたは一時的なデータがキャッシュから提供されるため、バックエンド サーバーとデータベースの負荷が軽減されます。
NCache あります オープンソースの、.NET および Java ベースのアプリケーションの両方のメモリ内分散キャッシュ。 NCache 新しいサーバーがこのキャッシュ クラスターに追加され、増大するパフォーマンス ニーズを満たすため、高速なトランザクション速度とデータの一貫性を実現するのに役立ちます。
次の図は、このアーキテクチャを示しています。
キャッシュされたデータはすべてのサーバー間で均等に分散され、データの損失を回避し、確実に複製されます 高可用性. したがって、分散キャッシュは XNUMX 秒あたり数十万のリクエストを処理し、負荷のピーク時のダウンタイムを防ぎます。
この分散構造により、XNUMX つのキャッシュ サーバーがダウンしても、他のサーバー ノードからデータを受信するため、単一障害点が発生しません。 したがって、ビジネスは影響を受けず、必要に応じて分散キャッシュにサーバーを簡単に追加できます。
キャッシングに理想的なデータには、分散キャッシュの最大のパフォーマンスを実現するために頻繁に読み取り集中型のデータが含まれますが、ときどき変更されます。 分散キャッシュは、データを次のように保存します。 Key-Value したがって、使用とアクセスが簡単になります。
NCache 詳細 動的クラスタリング キャッシングトポロジ
使い方 NCache 分散キャッシュとして
.NETアプリケーションの劇的なパフォーマンスの向上に加えて、次のような分散キャッシュ NCache 複数を提供する 高度な機能 これにより、キャッシュの使用がさらに柔軟になり、さまざまなユース ケースやビジネス ニーズに対応できるようになります。これには、以下のものも含まれます。
NCache CRUD操作
.NET アプリケーションに分散キャッシュを簡単に組み込むことができます。 キャッシュへの接続 データベースから取得したキャッシュ アイテムに対するキーを作成します。 その後、有効期限が 30 分のアイテムをキャッシュに挿入し、この接続を使用してフェッチできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Specify the cache name to connect with it ICache cache = CacheManager.GetCache("demoCache"); // Get product from database var product = FetchProductFromDB(1001); // Generate a key for the cache item string key = "Product:1001"; // Create cache item and add 30sec sliding expiration var cacheItem = new CacheItem(product); cacheItem.Expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(30)); // Now add this item in cache for future use cache.Insert(key, cacheItem); // Fetch item from cache product = cache.Get(key); |
同期Cと痛む データベース
データベースにキャッシュされたデータが変更される場合があります。 この状況は整合性の問題を引き起こし、アプリケーションが認識していない間にキャッシュされたデータが古くなります。 この問題を解決するために、 NCache キャッシュをデータベースと自動同期できます。 その結果、キャッシュされたレコードのデータベースで変更が発生するたびに、キャッシュから自動的に削除され、データの鮮度が確保されます..
このメカニズムをさらに支援するために、 NCache サポート ライトスルー, ローダー&リフレッシャー, 永続ストア これにより、キャッシュ内のデータがデータベースと同期されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Get orders against customerID from DB var order = FetchOrderByCustomerID("ALFKI"); // Generate unique cache key for the order string key = $"Order:{order.OrderID}"; CacheItem item = new CacheItem(order); // Create SQL query to select the data from database string query = "SELECT CustomerID, Address, City FROM dbo.Customers WHERE CustomerID = 'ALFKI';"; //Specify database connection string and the query to create and set SQLCacheDependency. item.Dependency = new SqlCacheDependency(dbConnString, query); // Insert the item into the cache cache.Insert(key, item); |
SQLクエリ
NCache サポートします SQL 特定の基準に従ってキャッシュを検索し、必要な結果セットを返すクエリ メカニズム。 NCache は、ネイティブの SQL 構造化言語に非常に近いクエリ言語を使用するため、インデックス付きキャッシュ データのクエリが容易になります。 次のような ADO.NET 準拠の API を提供します。 実行リーダー, 実行スカラー, 非クエリの実行 キャッシュからデータを検索 (SELECT) および削除 (DELETE) します。
NCache 詳細 SQLとLINQのサポート NCache SQLクエリ
ExecuteReader は、データを検索してキーと値のペアを返すために使用されます。 ExecuteReader メソッドを使用しているときに、キーのみを返すか、キーとそのデータ (全体またはチャンクのいずれか) を返すかを指定できます。
1 2 3 4 5 6 7 8 9 10 11 |
//string query = "SELECT * FROM FQN.Product WHERE UnitsInStock > ?"; var queryCommand = new QueryCommand(query); queryCommand.Parameters.Add("UnitsInStock",0); ICacheReader reader = cache.ExecuteReader(queryCommand); while (reader.Read()) { string ID = reader.GetValue("ProductID"); string Name = reader.GetValue("ProductName"); } |
LINQクエリ
LINQ は、データ ソースからデータを検索およびフィルター処理できる汎用 .NET クエリ言語です。 LINQ 構文は SQL に非常に似ていますが、機能的には、クエリを実行するときに、より優れた最適化されたクエリ方法を提供します。 NCache サーバー。 コードコンパイル中の構文チェックに対応しながら、より効率的なクエリ式を可能にする機能を提供します。
NCache LINQ をシームレスに統合し、LINQ プロバイダーを介してキャッシュ内の情報を照会します。 リンク プロバイダーは、LINQ オブジェクト モデルを変更せずにアプリケーションのパフォーマンスを向上させながら、分散キャッシュを介した LINQ クエリの実行を容易にします。
クエリ式は、LINQ 対応の分散キャッシュ サーバーからデータをクエリして変換します。
1 2 3 4 |
IQueryable products = new NCacheQuery(cache); IQueryable product = from prod in products where prod.UnitsInStock > 10 select prod; |
NCache 詳細 分散キャッシュ用の LINQ IQueryable
締結思考
パフォーマンスとスケーラビリティを提供する以外に、 NCache は、大阪で その他の便利な機能 それも。 それでも、実装に関連する複雑さを隠し、簡単な使用方法を提供します。 パフォーマンスとスケーラビリティを犠牲にすることなく、.NET ベースの分散キャッシュを探しているなら、これ以上探す必要はありません。 NCache. これは、最新の分散キャッシングの機能をすべて備えた純粋な .NET プラットフォームです。