これまで、専門家はシステムキャッシュを使用してパフォーマンスのボトルネックを解消しようとしましたが、ユーザートラフィックの増加に伴い、高速アプリケーションの必要性が高まっています。 したがって、メモリ内の線形にスケーラブルな分散キャッシングソリューションは次のようになります。 NCache 人気が高まっており、 システム性能 マルチフォールド。
一般に、システムアーキテクチャにキャッシュレイヤーが追加されているため、アプリケーションはXNUMXホップのデータ整合性を維持する必要があります。書き込み要求ごとに、キャッシュとバックエンドデータソースの両方でデータを更新する必要があります。 したがって、複数のアプリケーションがあり、同じキャッシュとデータベースにアクセスしている場合は、それらすべてに永続性コードを複製する必要があります。 これにより、アプリケーションレベルでコードが複雑になります。
NCache 詳細 NCache ライトスルードキュメント NCache ライトスルー管理ガイド
ライトスルーとは何ですか?
Write-Throughはキャッシュ技術であり、アプリケーションがデータをキャッシュに書き込み、バッキングソースが構成されている場合、データベース内のレコードも更新します。
NCache 〜を提供する Iライトスルー クライアントアプリケーションに存在していたであろうすべての永続化コードロジックを追加して、実装できるインターフェイス。 コードをすべてのキャッシュサーバーにデプロイする必要があります。 NCache Webマネージャー。
このように、キャッシュで書き込み操作が実行されるたびに、デプロイされたプロバイダーが呼び出され、データベースがロジックに従って更新されます。
ライトスループロバイダーを構成する方法については、以下を参照してください。 公式 NCache ライトスループロバイダーのドキュメント。
場合によっては、ライトスルー操作が失敗することがあります。これは、ネットワーク接続の問題やインターフェイス実装ロジックのエラーなど、いくつかの理由で発生する可能性があります。ライトスルーは同期なので、 NCache アプリケーションに例外をスローします。キャッシュ ログにもエラーが記録されています。
また、 NCache 動作ステータスも提供します。これにより、ユーザーはさまざまな所定のシナリオを柔軟に処理できます。 たとえば、操作が失敗して再試行したい場合は、関連するオプションを設定して、 NCache あなたのために引退を実行します。
これらの操作の詳細については、を参照してください。 NCache ドキュメント.
ライトスループロバイダーインターフェイス
先に述べたように、 NCache を公開します Iライトスルー ユーザーがサーバー側で実装して展開することが期待されるインターフェース。 以下のコードスニペットは、IWriteThuProviderメソッドを示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public interface IWriteThruProvider { // Perform tasks associated with freeing, releasing, or resetting resources. void Dispose(); // Perform tasks like allocating resources or acquiring connections void Init(IDictionary parameters, string cacheId); //Responsible for write operations on data source. OperationResult WriteToDataSource(WriteOperation operation); ICollection WriteToDataSource(ICollection operations); ICollection WriteToDataSource(ICollection dataTypeWriteOperations); } |
のXNUMXつの過負荷があります データソースへの書き込み 方法。 XNUMXつはアトミックデータベースの更新要求に対応し、もうXNUMXつはデータベースの一括書き込み要求を処理します。 NCache また、更新するコードロジックを追加できるメソッドも公開しています NCache-サポートされているデータ構造 バッキングソースに。
NCache 詳細 ライトスルーキャッシングドキュメント ライトスループロバイダーの構成
アプリケーションでのライトスルー
フロントエンドアプリケーションは、次のオプションを使用して、書き込み操作のためにキャッシュにアクセスするだけで済みます。 ライトスルー キャッシュがライトスループロバイダーを介してデータベースにその操作を適用するように指定されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Pre-Condition: Cache is already connected // Fetch product with the given ProductID Product product = FetchProductByProductID(1001); // Specify the key of the item string key = $"product.ProductID"; product.UnitPrice = 200; // Create a new cacheItem with the product var cacheItem = new CacheItem(product); // Enable write through for the cacheItem created var writeThruOptions = new WriteThruOptions(); writeThruOptions.Mode = WriteMode.WriteThru; // Add the item in the cache with WriteThru enabled CacheItemVersion itemVersion = cache.Insert(key, cacheItem, writeThruOptions); |
ライトビハインドキャッシュとは何ですか?
後書き 分散キャッシュでは、データベースを非同期的に更新することを除いて、ライトスルーキャッシュと同じです。 これは、アプリケーションがデータソースの更新を待つ必要がないことを意味し、バックエンドデータソースの更新は最も遅いアプリケーション操作であるため、アプリケーションのパフォーマンスが向上します。
データがデータベースに更新されると想定しても安全ですが、機密性の高いデータを扱う場合は、ライトスルーを選択することをお勧めします。 さらに、これは非同期メカニズムであるため、後書きの失敗は例外およびエラーとしてキャッシュログに記録されますが、アプリケーションにはスローされません。 NCache 動作ステータスも返すため、ライトスルーと同じ方法で障害を処理するオプションを提供します。
Job Status ページの下部にある NCache ドキュメント これらの操作の詳細については。
アプリケーションでの後書き
ライトビハインドは、同じライトスループロバイダーを非同期で使用するため、ライトスルー操作を実行するためのより高速な方法です。 アプリケーションに関する唯一の変更点は、Write-ThroughオプションをWriteThruではなくWriteBehindとして指定することの違いです。
以下のサンプルコードをご覧ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Pre-Condition: Cache is already connected // Fetch product with the given ProductID Product product = FetchProductByProductID(1001); // Specify the key of the item string key = $"product.ProductID"; product.UnitPrice = 200; // Create a new cacheItem with the product var cacheItem = new CacheItem(product); // Enable write through for the cacheItem created var writeThruOptions = new WriteThruOptions(); writeThruOptions.Mode = WriteMode.WriteBehind; // Add the item in the cache with WriteThru enabled CacheItemVersion itemVersion = cache.Insert(key, cacheItem, writeThruOptions); |
NCache 詳細 ライトスルーキャッシングドキュメント キャッシュで後書きを使用する
まとめ
のような分散キャッシングソリューションで NCache ライトスルーやライトビハインドなどの機能が提供されるようになったことで、バックエンド データベースの更新がより簡単になり、管理しやすくなりました。すべての永続化コード ロジックを単一のプロバイダー内にカプセル化します。これにより、データベース層をプロバイダー レベルで維持し、キャッシュ層をアプリケーション レベルで維持できるようになります。それで、 NCache、両方の長所を利用できます。読み取り操作ではキャッシュのパフォーマンスが得られ、書き込み操作ではデータが維持されます。したがって、次のようなエンタープライズ ソリューションを利用してシステムのパフォーマンスを向上させます。 NCache。私たちにご連絡ください。専門家がサポートいたします。