À mesure que les données deviennent plus critiques pour les entreprises, le besoin de traitement de données en temps réel (en particulier lorsque les données arrivent par blocs ou flux) et d'analyse augmente à un rythme sans précédent. Les applications qui dépendent du traitement des données en temps réel nécessitent une méthode fiable pour recevoir des notifications en temps réel lorsque des modifications de données se produisent sans entraîner de surcharge de performances résultant de l'interrogation manuelle, en particulier lorsque vous travaillez avec de grands ensembles de données. Pour résoudre ces problèmes, NCache fournit ses Requête continue fonctionnalité - où vous pouvez créer des requêtes qui filtrent les données selon vos critères définis.
Sans les tracas d'une interrogation manuelle, CQ permet aux développeurs de suivre les changements de données en temps réel et de recevoir des alertes. Par exemple, dans une application de trading d'actions en temps réel, les traders ont besoin de mises à jour constantes sur l'évolution des cours des actions. Sans un système de surveillance en temps réel adapté, ils devraient vérifier manuellement les cours des actions, ce qui entraînerait une perte de temps et des opportunités manquées. Les traders peuvent donc créer des requêtes qui filtrent les cours des actions pour recevoir des mises à jour en temps réel chaque fois que les données filtrées changent. Cela leur donne l'avantage de n'interroger le cache que pour le jeu de données de leur choix (en utilisant Requêtes OQL de type SQL) dans le cluster de cache distribué plutôt que d'épuiser le cache. Ce blog vous guidera dans l'utilisation de la requête continue pour surveiller les changements de données dans NCache en utilisant Python.
Surveillance des modifications via une requête continue dans NCache
Avec NCacheGrâce à la fonction de requête continue de , vous pouvez définir un jeu de données spécifique dans le réseau de cache distribué et suivre les modifications apportées à celui-ci à l'aide de requêtes OQL. Quand change se produisent dans l'ensemble de données (en raison d'opérations d'écriture telles que des opérations d'ajout, de mise à jour ou de suppression), les applications enregistrées sont mises à jour via Événements au niveau du cache, qui empêche le chevauchement des applications en filtrant les données à l'aide de requêtes OQL. En fournissant une méthode de suivi et de partage de données entre les applications via des événements, CQ permet aux développeurs de spécifier leur logique métier.
Lors de l'utilisation de CQ en Python, les utilisateurs peuvent tirer parti du NCache Python Client Library pour s'inscrire aux événements CQ. Vous pouvez également spécifier la quantité de données renvoyées lors de l'exécution de l'événement, c'est-à-dire, Aucun, Métadonnéesou DonnéesAvecMétadonnées. Cependant, il est essentiel de comprendre que la requête continue agit uniquement comme un mécanisme de surveillance des modifications plutôt que de modification des données d'application.
Configuration de la requête continue dans NCache
Les étapes mentionnées ci-dessous expliquent le processus d'inscription et de désinscription des rappels, des requêtes et des notifications pour recevoir des notifications sur l'ensemble de données que vous avez défini.
Étape 1 : Enregistrez le rappel pour les événements
Tout d'abord, vous devez enregistrer un rappel pour les événements de niveau cache, il peut s'agir de l'ajout, de la mise à jour, de la suppression ou d'une combinaison, afin que ces rappels soient exécutés chaque fois que la requête est modifiée. L'exemple de code ci-dessous montre comment enregistrer un rappel pour un événement 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") |
Vous pouvez également enregistrer des événements de rappel pour événements d'articles mis à jour et supprimés.
- NCache Détails
- Enregistrement du rappel pour les événements
- Enregistrement du rappel pour les événements
Étape 2 : enregistrer la requête et les notifications
Les processus clés pour suivre les changements de données dans NCache enregistrent des rappels et créent une requête continue qui spécifie les critères de l'ensemble de résultats. Suite à la création de la requête, les rappels prédéfinis sont enregistrés en fonction de Type d'événement ainsi que Filtre de données d'événement. Ensuite, le exécuter_reader est utilisé pour interroger les données mises en cache après que le CQ a été enregistré sur le serveur à l'aide registre_cq. Pour déclencher des événements, les données du cache peuvent être modifiées pour affecter l'ensemble de résultats. L'exemple de code ci-dessous illustre ce scénario.
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 |
- NCache Détails
- Enregistrer la requête et les notifications
- Utilisation de la requête continue dans NCache
Étape 3 : désinscrire les notifications de la requête continue
Pour ne plus recevoir de notifications de la requête continue dans votre application, vous avez le choix de les désinscrire à l'aide de la remove_data_modification_listener méthode. Cependant, cela est spécifique aux types d'événements tels que Ajouter et Supprimer. Vous pouvez même désinscrire les notifications d'ajout d'élément si vous vous êtes déjà inscrit pour les événements d'ajout et de suppression d'élément, mais que vous n'avez désormais besoin que de notifications pour l'élément supprimé.
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) |
Étape 4 : désinscrire la requête continue du serveur
Pour empêcher l'utilisation des ressources lorsque cette requête n'est plus requise, vous devez désinscrire la requête continue du serveur. Ce faisant, vous ne recevrez plus de notifications pour les modifications apportées au jeu de résultats de la requête. L'exemple de code suivant montre comment désinscrire CQ du serveur de cache en utilisant le un_register_cq méthode.
1 2 |
# Unregister cq from server cache.get_messaging_service().un_register_cq(c_query) |
Conclusion
Avec NCacheLa fonctionnalité de requête continue de vous permet de surveiller les modifications apportées à un jeu de données spécifique au sein d'un cluster de cache distribué. Il garantit que seules les données nécessaires sont récupérées par l'application, améliorant ainsi l'efficacité et minimisant le traitement de données superflues via des requêtes OQL et des événements de niveau cache. Un moyen aussi simple et flexible de surveiller les changements ? Commencez votre essai gratuit aujourd'hui!