ビジネスにとってデータがより重要になるにつれて、リアルタイムのデータ処理 (特にデータがチャンクまたはストリームで到着する場合) と分析の必要性が、前例のない速度で増加しています。 リアルタイム データ処理に依存するアプリケーションでは、特に大規模なデータセットを操作する場合に、手動ポーリングに起因するパフォーマンス オーバーヘッドを引き起こすことなく、データ変更が発生したときにリアルタイム通知を受信する信頼できる方法が必要です。 これらの問題に対処するには、 NCache その提供 連続クエリ 機能 – 定義した基準に従ってデータをフィルタリングするクエリを作成できます。
面倒な手動ポーリングなしで、CQ を使用すると、開発者はデータの変更をリアルタイムで追跡し、アラートを受け取ることができます。 たとえば、リアルタイムの株式取引アプリケーションでは、トレーダーは変化する株価を常に更新する必要があります。 適切なリアルタイム監視システムがなければ、手動で株価をチェックする必要があり、時間と機会を逃してしまいます。 したがって、トレーダーは、株価をフィルタリングするクエリを作成して、フィルタリングされたデータが変更されるたびにリアルタイムの更新を受け取ることができます。 これにより、選択したデータセットに対してのみキャッシュをクエリできるという利点が得られます ( SQL ライクな OQL クエリ) キャッシュを使い果たすのではなく、分散キャッシュ クラスター内で。 このブログでは、連続クエリを使用してデータの変更を監視する方法について説明します NCache Pythonを使用します。
での継続的なクエリによる変更の監視 NCache
NCacheの連続クエリ機能を使用すると、分散キャッシュ ネットワークで特定のデータセットを定義し、OQL クエリを使用してその変更を追跡できます。 いつ 変更 (追加、更新、または削除操作などの書き込み操作により) データセット内で発生し、登録されたアプリケーションは次の方法で更新されます。 キャッシュレベルのイベント、OQL クエリを使用してデータを除外することにより、アプリケーションの重複を防ぎます。 イベントを通じてアプリケーション間でデータを追跡および共有する方法を提供することにより、CQ は開発者がビジネス ロジックを指定できるようにします。
Python で CQ を使用する場合、ユーザーは NCache CQ イベントに登録するための Python クライアント ライブラリ。 イベントの実行時に返されるデータの量を指定することもできます。 なし, または メタデータ付きデータ. ただし、連続クエリは、アプリケーション データを変更するのではなく、変更を監視するためのメカニズムとしてのみ機能することを理解することが不可欠です。
継続的クエリの構成 NCache
以下の手順では、コールバック、クエリ、および通知を登録および登録解除して、定義したデータセットに対する通知を受信するプロセスについて説明します。
ステップ1:イベントのコールバックを登録する
最初に、キャッシュ レベル イベントのコールバックを登録する必要があります。これは、クエリが変更されるたびにこれらのコールバックが実行されるように、追加、更新、削除、または組み合わせのいずれかです。 以下のサンプル コードは、ITEM_ADDED イベントのコールバックを登録する方法を示しています。
1 2 3 4 |
def query_item_callback(key: str, arg: ncache.CQEventArg): if arg.get_event_type() is ncache.EventType.ITEM_ADDED: # Key has been added to the cache print(key + " added to cache") |
のコールバック イベントを登録することもできます。 アイテムの更新および削除イベント.
ステップ2:クエリと通知を登録する
データの変更を追跡するための主要なプロセス NCache コールバックを登録し、結果セットの条件を指定する連続クエリを作成しています。 クエリの作成に続いて、事前定義されたコールバックがに基づいて登録されます。 イベントタイプ & イベントデータフィルター。 次に、 実行リーダー を使用して CQ がサーバーに登録された後、キャッシュされたデータを照会するために使用されます。 レジスターcq. イベントをトリガーするために、キャッシュ データを変更して結果セットに影響を与えることができます。 以下のサンプル コードは、このシナリオを示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# Precondition: Cache is already connected # Query for required operation query = "SELECT $Value$ FROM FQN.Product WHERE category = ?" query_command = ncache.QueryCommand(query) query_command.set_parameters({"Category": "Beverages"}) # Create continuous query continuous_query = ncache.ContinuousQuery(query_command) event_type = [ncache.EventType.ITEM_REMOVED] # Item remove notification # EventDataFilter.Metadata returns cache keys + item metadata on updation continuous_query.add_data_modification_listener(cq_event_listener, event_type, ncache.EventDataFilter.NONE) # Register continuous query on server cache.get_messaging_service().register_cq(continuous_query) reader = cache.get_search_service().execute_reader(query_command) if reader.get_field_count() > 0: while reader.read(): result = reader.get_value(Product, 1) # Perform operations else: # None query result set returned print("Query result is None") # Update Product data in cache to trigger callback updated_product = Product() updated_product.set_product_id(1001) updated_product.set_product_name("Tea") key = "Product:" + updated_product.get_product_id() cache_item = ncache.CacheItem(updated_product) # Trigger add notifications version = cache.insert(key, cache_item) # This will add item to the result set as it matches query criteria |
ステップ3:継続的なクエリから通知の登録を解除する
アプリケーションで Continuous Query からの通知の受信を停止するには、 削除_データ_変更_リスナー 方法。 ただし、これは Add や Remove などのイベント タイプに固有のものです。 以前にアイテムの追加イベントと削除イベントの両方に登録していたが、現在は削除されたアイテムの通知のみが必要な場合は、アイテムの追加通知を登録解除することもできます。
1 2 3 |
# Unregister notifications for ItemAdded events only event_type = [ncache.EventType.ITEM_ADDED] c_query.remove_data_modification_listener(cq_event_listener, event_type) |
ステップ4:サーバーから継続クエリの登録を解除する
このクエリが不要になったときにリソースが使用されないようにするには、連続クエリをサーバーから登録解除する必要があります。 これにより、クエリ結果セットの変更に関する通知を受信しなくなります。 次のコード例は、キャッシュ サーバーから CQ を登録解除する方法を示しています。 un_register_cq 方法。
1 2 |
# Unregister cq from server cache.get_messaging_service().un_register_cq(c_query) |
まとめ
NCacheの連続クエリ機能を使用すると、分散キャッシュ クラスター内の特定のデータセットの変更を監視できます。 必要なデータのみがアプリケーションによって取得されることを保証し、効率を向上させ、OQL クエリとキャッシュ レベル イベントによる余分なデータ処理を最小限に抑えます。 変更を監視するための簡単で柔軟な方法はありますか? 今すぐ無料トライアルを始めましょう!