連続クエリの概要
NCache 実行時の監視と、観察可能なデータ セットに関連するデータの共有のための継続的クエリを提供します。 これにより、キャッシュ内のクエリ結果セット内で発生したすべての変更をアプリケーションに通知できるようになります。
たとえば、証券取引所の Web アプリケーションでは、多くのクライアントが株式を保有している企業の株価に関心を持っています。このようなアプリケーションでは、どの企業でも株価が急速に変化するため、非常に頻繁に表示される変化を反映する必要があります。 ここでは、すべての企業の株価を表示する代わりに、クライアントが関心のある特定の企業のみのキャッシュをクエリできるため、継続的クエリが便利です。したがって、結果セットが変更されるたびに、クライアントに通知されます。それとクライアントビューは最新の株価で更新されます。
イベントの種類
クエリの結果セットの変更は、次の操作によってトリガーできます。
Add: キャッシュに項目を追加するか、既存の項目を更新すると、任意のクエリに項目を追加できます。
アップデイト: 既存のキャッシュ アイテムを更新していますが、クエリ結果セットには残ります。
削除します: キャッシュから項目を削除するか、クエリ結果セットから項目が削除されるように既存のキャッシュされた項目を更新します。 アイテムは、有効期限切れ、削除、依存関係の変更、または明示的な API 削除によって削除されることもあります。
キャッシュにクエリの結果セットがあると仮定しましょう "SELECT * FROM FQN.Product WHERE Category = 'Beverages'"
.
「Key1」は次のキャッシュに存在します プロダクト クラスオブジェクト:
var product = new Product
{
ProductID = 1001,
ProductName = "Coffee",
UnitsAvailable = 55,
Category = "Food Items"
};
この項目はキャッシュ内に存在しますが、条件に一致しないため、結果セットにはまだ存在しません。 したがって、オブジェクトは更新され、 カテゴリー に変更されました 「飲料」。 これは、基準を満たし、結果セットに追加されることを意味します。 これにより、
ItemAdded
イベントタイプ。
オブジェクトが更新され、 商品名 値 "コーヒー" 〜へ "アイスコーヒー"。 これは、基準が影響を受けないようにオブジェクトが変更されたことを意味します。 したがって、結果セットに残り、
ItemUpdated
イベントタイプ。
オブジェクトが再度更新され、 カテゴリー 値がから変更されます 「飲料」 〜へ 「冷たい飲み物」。 これは、クエリ条件が満たされなくなったことを反映しているため、「Key1」は結果セットからは削除されますが、キャッシュからは削除されません。 これにより、
ItemRemoved
イベントタイプ。
イベントデータフィルター
イベントデータフィルター イベントの実行時に返される情報の量を定量化するために指定されます。 登録されたイベントは、これらのデータフィルターに基づいた情報をユーザーに提供します。
なし
このフィルターは、イベント通知の操作によって影響を受けるキーのみを返します。 これは、アプリケーションが影響を受けたキーのみを知りたい場合に使用されます。たとえば、eコマースサイトは、値自体ではなく、追加されたプロダクトキーを知りたい場合に使用します。
このフィルターを使用すると、影響を受けるキーとそのキャッシュ アイテムのメタデータがイベント通知で返されます。 返されるメタデータには、グループ、キャッシュ項目の優先順位、項目に関連付けられた有効期限値が含まれます。 たとえば、アプリケーションは、どのキーがキャッシュから削除されたか、およびそれらがどのグループに属しているかを知りたいとします。
メタデータ付きデータ
このフィルターは、キャッシュされたアイテムおよびそれらに関連するメタデータとともにキーを返します。 これは、銀行アプリケーションでどの顧客情報が変更されたかを知る必要がある場合に使用できます。 したがって、このフィルターを使用してアイテム更新操作の通知を登録できるため、イベントが発生するとアイテム キーと変更されたアイテムもユーザーに返されます。 このフィルターを使用すると、アイテムを再度取得する手間が省けます。 Get
API。 ただし、ネットワークに費用がかかるため、このフィルタは必要に応じて使用する必要があります。
警告
EventDataFilter
不要なネットワーク帯域幅の消費を避けるために、慎重に設定する必要があります。
ポータブルデータ構造のデータ共有
.NETおよびJavaクライアントを備えたアプリケーションがある場合があります。 を有効にすることにより データ共有 クラスタ化されたキャッシュの機能を使用すると、同じクエリを使用しても、両方のクライアントに対して同じオブジェクトにインデックスを付けることができます。 登録されたクエリ結果セットの両方のクライアントによって追加、更新、または削除されたキャッシュアイテムについては、Javaまたは.NETに関係なく、各クライアントに通知が送信されます。
運用コスト
継続的クエリは、変化の激しい運用データを使用するリアルタイム アプリケーションを構築する場合に非常に役立ちますが、クライアントの監視と通知にはリソースを消費する追加の処理が必要になります。 このプロセスは非同期であるため、キャッシュ クライアントは影響を受けません。 したがって、この機能を効率的に使用するには、アプリケーションがクエリ結果セットの追跡を必要としない場合は、通知を登録解除し、キャッシュからクエリも登録解除します。