リードスルー、ライトスルー、ライトビハインド NCache

NCache は、アプリケーション データをキャッシュして、高価なデータベース トリップを削減する、非常に高速でスケーラブルな .NET 用のインメモリ分散キャッシュです。 使用できます NCache データ ストレージとデータベースのスケーラビリティに関連するパフォーマンスのボトルネックを解消します。

このようなキャッシュを使用する最も一般的な方法は、アプリケーションでデータベース/データ ソースからデータを読み取り、それをキャッシュすることです。 その後、アプリケーションがデータベース内のこのデータを更新するときに、キャッシュも更新して、キャッシュがデータベースと同期していることを確認します。

また、 NCache データ ソース プロバイダー (リードスルー/ライトスルー/ライトビハインド) と呼ばれる、データを読み書きするための別の非常に強力なメカニズムを提供します。 NCache データベースからデータを読み書きします。

XNUMXつの使い方ができます NCache この文脈では:

  1. 読み上げ: クラスター内のすべてのキャッシュ サーバー上で常駐して実行されるリードスルー ハンドラーを開発します。 その後、アプリケーションがキャッシュからデータをフェッチすると、 NCache データがまだキャッシュに存在しない場合は、リードスルー ハンドラーを呼び出して、データ ソースからこのデータを読み取ります。
  2. ライトスルー (同期): クラスター内のすべてのキャッシュ サーバー上に常駐して実行されるライトスルー ハンドラーを開発します。 また、アプリケーションがキャッシュ内のデータを更新すると、 NCache まずキャッシュを更新し、次にライトスルー ハンドラーを呼び出してデータベースも即座に更新します。 また、アプリケーションはデータベース内のデータが更新されるまで待機します。
  3. 後書き (非同期): ライトスルー ハンドラーがデータベース内のデータの更新を完了するまでアプリケーションを待機させたくない場合は、ライトビハインド オプションを選択できます。 NCache データベースを非同期的に更新するため、アプリケーションはデータベースの更新を待つ必要がありません。 データベースの更新は通常、キャッシュの更新よりもはるかに遅いため、これによりアプリケーションが高速化されます。
図 1: サーバー側コード (.NET 版)
図 1: サーバー側コード (.NET 版)
図 1: サーバー側のコード (Java Edition)
図 2: サーバー側のコード (Java Edition)

リードスルー/ライトスルー/ライトビハインドの利点

ここでは、リードスルー、ライトスルー、ライトビハインドを使用する利点をいくつか示します。 NCache.

  1. ライトビハインドによる書き込みパフォーマンスの向上: データベースの更新は、通常、キャッシュの更新よりもはるかに時間がかかります。 ライトビハインドを使用すると、アプリケーションはキャッシュを更新するだけで、その間に続行します。 NCache データベースを非同期的に更新します。 これにより、アプリケーションのパフォーマンスが大幅に向上します。
  2. 後書きスロットリングによるデータベースのスケーラビリティの向上: アプリケーションがデータベースを頻繁に更新している場合、アプリケーションが停止する可能性があります。 ただし、ライトビハインドによるスロットルをオンにすると、 NCache レプリケーションを使用してキャッシュ内のデータを常に更新し、データベースをゆっくりと更新します。 これにより、データベースの負担が大幅に軽減されます。
  3. 期限切れ時にキャッシュを自動更新: リードスルー ハンドラーを開発した場合は、次のコマンドを使用して有効期限切れ時の自動更新を有効にすることができます。 NCache. このように、キャッシュされたアイテムが期限切れになるたびに、キャッシュからアイテムを削除する代わりに、 NCache リードスルー ハンドラーを呼び出して、データ ソースから新しいコピーを再読み込みします。
  4. データベース変更時のキャッシュの自動更新: リードスルー ハンドラーを開発した場合は、次のコマンドを使用して SQL 依存関係/Oracle 依存関係の自動リフレッシュを有効にすることができます。 NCache. このように、データベース内の対応するデータが変更されるたびに、キャッシュされたアイテムをキャッシュから削除する代わりに、 NCache リードスルー ハンドラーを呼び出して、データベースから新しいコピーを再ロードします。

機能のハイライト

以下に、リードスルー、ライトスルー、ライトビハインドのハイライトをいくつか示します。 NCache.

  1. サーバー側コード (.NET または Java): .NET または Java を使用して、リードスルー/ライトスルー ハンドラーを開発できます。 コードを開発してクラスター内のすべてのキャッシュ サーバーにデプロイするハンドラーごとにインターフェイスがあります。 NCache 必要に応じて実行時にそれらを呼び出すことができます。 .NET で開発されたハンドラーはすべて、.NET によってネイティブに呼び出されます。 NCache これも.NETで開発されているためです。 ただし、Java で開発されたハンドラーは次のように呼び出されます。 NCache Java Native Interface (JNI) を介して。
  2. 複数のリードスルー/ライトスルー ハンドラー: 複数のリードスルーおよびライトスルー ハンドラーを開発し、それらを NCache。 この場合、それらにはすべて名前が付けられており、アプリケーションは名前を指定することでそれらのいずれかを要求できます。
  3. デフォルトのリードスルー/ライトスルー ハンドラ: 複数のハンドラーが名前付きハンドラーとして登録されている場合、 NCache それらの XNUMX つをデフォルトのオプションとして選択できます。 このデフォルトのハンドラーは、アプリケーションがハンドラー名を指定しない場合に使用されます。
  4. 読み通しのハイライト
    1. 強制リードスルー: NCache 項目がキャッシュ内に存在する場合でも、リードスルーを使用するように指示できるオプションを提供します (通常、リードスルーはキャッシュ内に項目が見つからない場合にのみ呼び出されます)。 これにより、データが変更された可能性があると思われる場合に、データベースからこのアイテムを更新できます。
    2. 一括読み取り: NCache は、アプリケーションがキャッシュからデータをフェッチできるキーのリストを提供できるようにする Bulk Get API を提供します。
    3. データ構造のリードスルー (カウンター、ディクショナリ、リスト、キュー、セット): NCache アプリケーションにあらゆるデータ構造をフェッチする機能を提供し、 NCache リードスルー ハンドラーを呼び出して、データベースからこのデータを取得します。
  5. ライトスルー ハイライト
    1. アイテムのライトスルーを削除: NCache また、キーを使用してキャッシュからアイテムを削除し、その後データ ソースからアイテムを削除できるようにする Remove API もアプリケーションに提供します。
    2. アイテムの一括削除 ライトスルー: NCache また、アプリケーションがキャッシュおよびデータ ソースから一括で削除するキーのリストを提供できるようにする一括削除 API も提供します。
    3. 一括追加/更新 ライトスルー: NCache アプリケーションがキーとその値のリストを提供してキャッシュを一括で追加/更新できるようにする一括追加/更新 API を提供します。 ライトスルーはこの状況でも機能し、これらのアイテムを使用してデータベース/データ ソースを一括で追加/更新します。
    4. データ構造のライトスルー (カウンター、ディクショナリ、リスト、キュー、セット): NCache アプリケーションが任意のデータ構造を更新する機能を提供し、 NCache ライトスルー ハンドラーを呼び出して、データベースを変更内容で更新します。
    5. 非同期の追加/更新/削除 ライトスルー: NCache API は非同期の追加/挿入/削除を提供します。 ライトスルーはこの API をサポートしており、アプリケーションがその API 呼び出しを行うたびに呼び出されます。 ここ。 ライトスルーは、アプリケーションが操作の完了を待機していることを前提とし、非同期であるという事実はクライアント API レベルでのみ認識されます。
  6. 後書きハイライト
    1. 複製された非同期操作キュー (高可用性): ライトビハインドは、キャッシュを更新するクライアントの要求を受け入れ、すぐにキャッシュを更新しますが、後で非同期実行するためにデータベースの更新をキューに入れます。 このキューは、キャッシュ トポロジに応じて常に複数のキャッシュ サーバーに複製され、キャッシュ サーバーが突然ダウンした場合でもこれらの操作が失われないようにします。
    2. 調整: ライトビハインド非同期操作のスロットル レベルを指定できます。 これにより、それらを分散させることができます。 デフォルトのスロットル レベルは 500 ops/秒です。
    3. ライトビハインドモード (非バッチまたはバッチ): 非バッチ モードは、ライトビハインド キュー内の各操作が個別に実行されるのに対し、バッチ モードでは複数の操作をひとまとめにして、まとめて実行することを意味します。
    4. バッチ操作の遅延: XNUMX つのバッチ モード操作間の遅延を指定できます。 これにより、必要に応じてデータベースの更新を遅くすることができます。
    5. 失敗した操作キュー: ライトビハインドは操作が失敗した場合にすべての操作を非同期に実行するため、 NCache これを失敗した操作キューに入れることで、失敗していない新たな操作を妨げることなく再実行できるようになります。 最大サイズと削除を指定できます。
  7. カウンタによるライトスルー/ライトビハインドの監視: NCache ライトスルー/ライトビハインドで何が起こっているかを監視できる豊富なカウンターのセットを提供します。 これらのカウンターは、 NCache モニター、Windows PerfMon ツール、SNMP カウンター、Prometheus、および Grafana。

リードスルー/ライトスルー コード インターフェイス

リードスルー ハンドラーおよびライトスルー ハンドラーのコードの開発は簡単なプロセスです。 以下に両方のインターフェイスの例を示します。

public interface IReadThruProvider
{
	void Init(IDictionary parameters, string cacheId);
	ProviderCacheItem LoadFromSource(string key);
	IDictionary<string, ProviderCacheItem> LoadFromSource(ICollection<string> keys);
	ProviderDataTypeItem<IEnumerable> LoadDataTypeFromSource(string key, DistributedDataType dataType);
	void Dispose();
}
public interface ReadThruProvider extends java.lang.AutoCloseable
{
	void init(java.util.Map<java.lang.String,java.lang.String> parameters, java.lang.String cacheId) throws java.lang.Exception;
	ProviderCacheItem loadFromSource(java.lang.String key) throws java.lang.Exception;
	java.util.Map<java.lang.String,ProviderCacheItem> loadFromSource(java.util.Collection<java.lang.String> keys) throws java.lang.Exception;
	ProviderDataStructureItem loadDataStructureFromSource(java.lang.String key, DistributedDataStructureType distributedDataStructureType) throws java.lang.Exception;
}
public interface IWriteThruProvider
{
	void Init(IDictionary parameters, string cacheId);
	OperationResult WriteToDataSource(WriteOperation operation);
	ICollection<OperationResult> WriteToDataSource(ICollection<WriteOperation> operations);
	ICollection<OperationResult> WriteToDataSource(ICollection<DataTypeWriteOperation> dataTypeWriteOperations);
	void Dispose();
}
public interface WriteThruProvider extends java.lang.AutoCloseable
{
	void init(java.util.Map<java.lang.String,java.lang.String> parameters, java.lang.String cacheId) throws java.lang.Exception;
	OperationResult writeToDataSource(WriteOperation operation) throws java.lang.Exception;
	java.util.Collection<OperationResult> writeToDataSource(java.util.Collection<WriteOperation> operations) throws java.lang.Exception;
	java.util.Collection<OperationResult> writeDataStructureToDataSource(java.util.Collection<DataStructureWriteOperation< dataStructureWriteOperations) throws java.lang.Exception;
}

お問い合わせ(英語)

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