アプリケーションとデータベースの間にキャッシュ サーバーを配置して、アプリケーションを高速化できます。 しかし、アプリケーションを拡張する必要がある場合、それだけでは十分ではありません。 パフォーマンスを向上させるための XNUMX つのキャッシュ パターンとその方法を見てみましょう。 NCache それらを実装します。
データパーティショニングによるスケーラビリティ
データ パーティショニングでは、大きなデータ セットを小さなデータ セットに分割し、ノード間で分散します。 このようにして、ノード間で読み取りと書き込みを分割し、アプリケーションの全体的なパフォーマンスを向上させます。 NCache 異なるサポート キャッシングトポロジ。 この文脈では、トポロジはデータ ストレージ、レプリケーション、およびクライアント接続戦略です。 データ パーティショニングを実装するトポロジは XNUMX つあります。 パーティショントポロジおよびパーティションレプリカトポロジ。 これら XNUMX つのトポロジでは、 NCache データをバケットに分割し、それらのバケットをクラスターのノードに配置します。
NCache は 1000 個のバケットを使用し、それらをクラスター内のノード間で均等に分割します。 たとえば、単一ノードでキャッシュ クラスターを開始すると、 NCache すべてのバケットを単一のノードに割り当てます。 別のノードを追加すると、 NCache これらの 1000 バケットを 500 つの XNUMX バケット ノードに分割します。 また、ノードを削除すると、 NCache バケットを残りのノードに分散します。
Since NCache データをバケットとノードに分割すると、キャッシュ クライアントはすべてのノードに接続しますが、アイテムを含むノード上で読み取りおよび書き込み操作を直接実行します。 ノードが利用できない場合でも、キャッシュ クライアントはアクティブなノードを使用してリクエストを再ルーティングし、操作を完了します。 NCache すべてのノードのデータ サイズをほぼ同じに保ちながら、ノード間でバケットを分散します。 このようにして、ノード間で読み取りと書き込みを分割するだけでなく、ノードを追加するたびにクラスターのストレージ容量も増加します。
データ パーティショニングのおかげで、パーティションおよびパーティション レプリカ トポロジは、トランザクションの負荷とストレージ容量を拡張します。 もちろん、パーティションとパーティション レプリカはサポートされるトポロジの XNUMX つにすぎません。 NCache もっとあります トポロジ さまざまなデータ ストレージとレプリケーション戦略を使用します。 たとえば、それらの中には、より多くの読み取りまたは書き込みを行うアプリケーションに適したものもあります。
キャッシング戦略
データ パーティショニングを使用すると、単一サーバーよりも多くのアイテムをクラスターにキャッシュできるため、アプリケーションの可用性とパフォーマンスが向上します。 また、キャッシュにデータを格納する方法を選択することで、アプリケーションのパフォーマンスを向上させることができます。 キャッシュを設定するには、キャッシュ アサイドとリードスルー/ライトスルーの XNUMX つの戦略があります。
キャッシュ アサイド戦略では、キャッシュ サーバーがデータベースの隣に配置されます。 キャッシュにアイテムが含まれていない場合、アプリケーションはデータベースからアイテムを読み取り、キャッシュに保存します。 この戦略では、キャッシュ サーバーはデータベースと直接対話しません。 おそらく、キャッシュについて考えるときに最初に思い浮かぶのは、キャッシュ アサイド戦略ではないでしょうか。
キャッシュ アサイド戦略とは異なり、リードスルー/ライトスルー戦略では、キャッシュはメインのデータ ソースのように機能します。 ここで、キャッシュはデータベースとの間でデータの読み取りと書き込みを行います。 したがって、これらの戦略は、頻繁に読み取って定期的に変更する参照データでより効果的に機能し、データベース行ではキャッシュ項目に簡単にマッピングできます。
リードスルー/ライトスルーを使用すると、データ アクセス コードの一部がアプリケーションからキャッシュに移動され、アプリケーション コードがよりシンプルかつ小さくなります。 NCache は、リードスルーおよびライトスルーのキャッシュ戦略をサポートします。
リードスルーキャッシング
NCache キャッシュ ミスがあった場合は、カスタム リードスルー プロバイダーを使用して基礎となるデータベースを呼び出します。 また、強制することもできます NCache キャッシュミスがない場合でも、常にデータベースを読み取るようにします。 リードスループロバイダーは、 IReadThruProvider インターフェイス。 のようなメソッドが含まれています ソースからロード および LoadDataTypeFromSource.
いったん リードスループロバイダー のいずれかを介してキャッシュ サーバーにデプロイされます。 NCache Manager または PowerShell スクリプトでは、次のように ReadThruOptions オブジェクトをパラメータとして Get メソッドに渡して、クライアント アプリケーションから使用できます。
1 2 3 4 5 6 7 8 9 10 11 |
// After having NCache up and running... var key = $"Product:123456"; var readThruOptions = new ReadThruOptions { Mode = ReadMode.ReadThru }; // Retrieve a cached item with Read-Thru enabled var data = cache.Get<Product>(key, readThruOptions); // Do something with the cached product here... |
ライトスルーキャッシング
一方、ライトスルー戦略では、 NCache 最初にキャッシュを更新し、その後でデータベースを更新します。 NCache データベースを同期または非同期で更新できます。 NCache 非同期ライトスルー更新を呼び出します: ライトビハインド。
ライトスループロバイダーは、 IWriteThruProvider インターフェイス。 これには、単一および複数の項目のオーバーロードを備えた WriteToDataSource メソッドが含まれています。 データ構造。 ライトスループロバイダーは、項目を追加、削除、更新するための書き込み操作をサポートする必要があります。
リードスループロバイダーをデプロイするのと同様に、 ライトスループロバイダー 私たちのキャッシュに。 プロバイダーをデプロイしたら、クライアント アプリケーションで、 ライトスルー オプション このようにアイテムをキャッシュに挿入するときのオブジェクト、
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// After having NCache up and running... var product = BuildProduct(); var key = $"Product:{product.ProductId}"; var cacheItem = new CacheItem(product); var writeThruOptions = new WriteThruOptions { Mode = WriteMode.WriteThru; } // Add an item with Write-Thru enabled cache.Insert(key, cacheItem, writeThruOptions); |
リードスルーとライトスルーは、アプリケーションのスケーラビリティとパフォーマンスの向上に役立ちます。 リードスルーを使用すると、キャッシュされたアイテムは常に利用可能になります。 NCache 期限切れのアイテムを自動的に読み取ることができます。 また、ライトスルーを使用すると、アプリケーションはデータベースへの書き込みを待つ必要がなくなります。 NCache データベースを非同期に更新でき、スロットル メカニズムを使用していても、データベースへの負荷を軽減できます。
まとめ
これらは、パフォーマンスとスケーラビリティを向上させるための XNUMX つのキャッシュ パターン、データ パーティショニングとキャッシュ戦略です。 使用できます NCache それらをアプリケーションに実装します。 データのパーティショニングを使用すると、ノード間で読み取りと書き込みが分割され、キャッシュのストレージ容量が増加します。 我々は持っています NCache そのためのパーティションおよびパーティションレプリカトポロジ。 また、リードスルー/ライトスルーを使用すると、キャッシュ サーバーがデータのソースとなり、データベースへの負担が軽減されます。
データのパーティショニングとリードスルー/ライトスルーの詳細については、次の XNUMX つのガイドを参照してください。 パーティション化されたパーティションとパーティションレプリカのトポロジ および データソースプロバイダー キャッシュ用。 これら XNUMX つのキャッシュ パターンを活用してアプリケーションを拡張したい場合は、次のようにします。 NCache 試してみます。