AppFabricが市場から撤退した後も、.NET 業界は引き続きインメモリ分散キャッシュが競争相手として台頭しようとしています。 いくつかの代替案が提案されていますが、これほど完全なソリューションを提供するものはありません NCache.
NCache はオープンソースのインメモリ分散キャッシュで、アプリケーション データをキャッシュし、コストのかかるデータベース トリップを削減する、非常に高速で直線的にスケーラブルな分散キャッシュをユーザーに提供します。 NCache は実績のある市場商品であり、App Fabric よりも約 XNUMX 年前から存在します。 また、以下で説明するように、移行プロセスの最後には多くの利点が待っています。
NCache 詳細 AppFabric 終わり AppFabric 移行
1.キャッシュを最新の状態に保つ
データベース同期は、高品質のメモリ内分散キャッシュにとって重要な機能です。 通常、分散キャッシュはアプリケーションとデータベースの間の中間層にあるため、データがデータベースまたはキャッシュに個別に直接更新される可能性が高くなります。 この問題には、古いデータを防止するメカニズムが必要です。
したがって、このような分散キャッシュでは、キャッシュされたアイテムとデータベース内の対応するアイテムとの間の関係または依存関係を指定できる必要があります。 そのため、データベースが変更されるたびに、その変更は無効化または更新によってキャッシュに反映されます。
たとえば、 NCache は、大阪で Sql依存性 SQL Server のサポート。 SQL ステートメントベースのデータセットを使用して、キャッシュされたアイテムの依存関係を作成できます。 その特定のデータセットが変更または修正されるたびに、SQL Server はイベントを NCacheとなり、キャッシュ アイテムは無効化されます。 たとえば、CacheItem item = newCacheItem(myObject);
1 2 3 4 5 6 7 8 9 10 11 |
// Get orders against customerID from DB var order = FetchOrderByCustomerID("ALFKI"); // Generate a unique cache key for the order string key = $"Order:{order.OrderID}"; CacheItem item = new CacheItem(order); // Create SQL query to select the data from the database string query = "SELECT CustomerID, Address, City FROM dbo.Customers WHERE CustomerID = 'ALFKI';"; //Specify the 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); |
したがって、キャッシュはデータベースと同期します。 NCache また、Oracle、OleDB、さらには FileSystems のような非リレーショナル データ ソースでも同じ機能をサポートしています。 永続ストア.
NCache 詳細 Oracle Database オレDB
2.SQL クエリ
与えられた NCacheの同期機能により、すべてのデータをキャッシュに保持することを検討するのは簡単です。 残念ながら、キーによるフェッチが唯一のオプションである場合、検索はキャッシュされたデータを介してのみ可能であるため、これにはわずかな問題が発生します。 NCache は、SQL クエリを通じてこれに対するソリューションを提供します。 これは インデキシング .NET オブジェクトの属性を選択し、検索クエリを実行します。
1 2 3 4 5 6 7 8 9 |
//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"); } |
開発者のエクスペリエンスを向上させるために、 NCache 割り当てることもできます グループヘッド, タグ, 名前付きタグ 後でSQLクエリで使用してアイテムをすばやく取得できるキャッシュされたアイテムに。
3. LINQ クエリ
同様に、 NCache 以下に示すように、LINQ クエリを介してデータを走査する機会をユーザーに提供します。
1 2 3 4 |
IQueryable products = new NCacheQuery(cache); var result = from prod in products where prod.ProductID > 1001 select prod; |
さらに、識別された 論理的, アグリゲーション, ワイルドカード 操作。
4. サーバー側コード
多くの場合、分散キャッシュは、アプリケーションがデータベースからデータを取得してキャッシュに挿入するのに役立ちます。 ただし、アプリケーションがこの責任を分散キャッシュに委任する別のアプローチもあります。 基本的に、アプリケーションがキャッシュからアイテムを要求すると、問題のアイテムがキャッシュに存在するかどうかが判断され、対応するデータがデータベースから読み込まれます。 この機能は 既読スルー. NCache 同様のものを提供します ライトスルー オプションを使用すると、キャッシュを介してデータ ソースに直接書き込み操作を行うことができます。
NCacheさん サーバー側の機能 Cache Loader & Refresher を使用するとさらに効果的です。 この機能は、最初は空であるため、すべてのキャッシュが起動時に直面する初期パフォーマンス ギャップをうまく克服しました。 ローダーを使用して、必要なデータを特定し、プリロードすることができます。 リフレッシャーは単に、このデータが古くならないようにするために存在します。
NCahttps://www.alachisoft.com / resources / docs /ncache/prog-guide/server-side-api-programming.htmlche は、完全な MapReduce フレームワークも提供します。このフレームワークでは、キャッシュされたデータを分析して、実用的な洞察をリアルタイムで生成できます。 MapReduce コードは .NET で記述されているため、 NCache プロセス。
NCache 詳細 MapReduce NCache ローダー&リフレッシャー
5.クライアントキャッシュ(キャッシュの近く)
A クライアントキャッシュは、Web サーバーまたはアプリケーションに対してローカルであり、同じプロセスまたはサーバー マシン内で頻繁に使用されるデータをキャッシュできます。 そのため、クライアント キャッシュはアフィニティ キャッシュであり、データの整合性を損なうことなくネットワーク帯域幅のコストを削減することで、アプリケーションのパフォーマンスをさらに向上させます。 クライアント キャッシュはすべての NCache クラスタ化された キャッシングトポロジ (ミラーリング、パーティション化、およびパーティションレプリカキャッシュ)。
これは、キャッシュ クラスターへの接続を維持し、メイン キャッシュ クラスターの変更をレプリケートして同期することによって行われます。 の違い AppFabric ローカルキャッシュと NCache クライアントキャッシュはそれです AppFabric ローカル キャッシュはスタンドアロンであり、メイン クラスターとの接続を作成しません。
6.マルチデータセンターのサポート
WAN レプリケーションは、大規模なメモリ内分散キャッシュにとって重要なもう XNUMX つの機能です。 AppFabric 欠けています。 これは、地理的に分散したデータ センターで最も役立ちます。災害復旧やローカライズされたトラフィックの負荷分散に役立ちます。
NCache WAN 遅延を処理するためのブリッジ トポロジを提供します。 の NCache ブリッジ 世界中のさまざまなキャッシュ間で一貫性を複製し、維持します。 災害復旧のためにクラスターのレプリカを模倣するためにキャッシュ クラスターをパッシブに保つか、異なるデータ センターで XNUMX つの個別のキャッシュを同期するかのいずれかを選択できます。 データは、安全なインターネット接続を介して非同期的に複製されます。
NCache 詳細 クライアントキャッシュ WANレプリケーション
7.ダイナミッククラスター
すべてとして AppFabric お客様は、クラスターが完全に動的ではないことに気付いている可能性があります。 Microsoft がリード ホスト マジョリティ ルールに依存しているということは、リード ホストの XNUMX つでもダウンすると、非常に簡単にダウンしてしまう非常に誤りやすいクラスタを意味します。 これらのリード ホスト ノードもマスター アンド スレーブ アーキテクチャに似ており、完全なピア ツー ピアでもありません。
また、 NCache is 非常に動的 また、中断することなく実行時にキャッシュ サーバーを追加または削除できます。 データは自動的に再調整されます (または 国譲りの) パフォーマンスを低下させることなく、実行時に。 NCache クライアントは、サーバーの状態に関係なく、キャッシュ サーバーとの通信チャネルを自動的に維持します。 さらに、そのキャッシュ クラスターは、データ バランシング (状態転送) が進行中の場合でも、クライアント操作の実行を保証します。
これは、クラスター内にマスター ノードまたはスレーブ ノードが存在しないことを意味します。 シニア ノードであるプライマリ コーディネーター ノードがあります。 そして、それがダウンした場合、次に上位のノードが自動的にプライマリ コーディネーターになります。 これらはすべて、クライアントの操作を中断することなく行われます。
8.サードパーティの統合
あげくの果てに、 NCache は、次のようなさまざまな重要なサードパーティ ライブラリのプロバイダーを公式にサポートしています。
まとめ
要するに、 NCache 企業が .NET アプリケーションで使用および必要とする幅広い機能を紹介します。 特に、 AppFabric ライフサイクルのどの時点でも導入に至りませんでした。 したがって、最善を尽くして、実際にニーズに対応する分散キャッシュ システムに投資したい場合は、ダウンロードしてください。 NCache 痛みのない移行のために。
NCache 詳細 ダウンロード NCache エディションの比較