Mongo DB est une NoSQL, évolutive, open-source, hautes performances et orientée document. C'est l'un des meilleurs NoSQL databases sur le marché. L'utilisation de la mise en cache avec Mongo DB donne aux applications une amélioration significative des performances en réduisant les déplacements vers la base de données. Cependant, la mise en cache des données Mongo DB dans un cache distribué crée deux copies de ces données. Une copie réside dans Mongo DB et une copie réside dans le cache distribué. Si une application modifie directement les données à l'intérieur de Mongo DB, les données à l'intérieur du cache deviennent obsolètes.
Pour les applications à transactions élevées, multi-environnements et au niveau de l'entreprise, ces données obsolètes constituent un gros problème. Dans ce blog, je vais expliquer comment vous pouvez continuer à utiliser un cache distribué aux côtés de Mongo DB et éviter en même temps le problème des données obsolètes.
Synchroniser le cache avec Mongo DB en utilisant NCache
NCache est un cache distribué bien connu pour .NET Framework/ .NET Core, Java et Node.js. NCache fournit un vaste ensemble de fonctionnalités qui peuvent améliorer les performances de votre application à pas de géant. Parmi ces vastes ensembles de fonctionnalités, il y a une fonctionnalité connue sous le nom de Dépendance extensible basée sur les notifications. Cette fonctionnalité résout le problème des données obsolètes avec MongoDB (dont nous avons parlé plus tôt).
Les NotifyExtensibleDependency
La classe vous permet d'écrire votre logique de dépendance personnalisée dans laquelle vous êtes informé des modifications apportées à la base de données par le biais de notifications. NCache traite ces notifications en utilisant une fonctionnalité de Mongo DB (introduite dans la version 3.6) connue sous le nom de Changer de flux. Une fois ces notifications traitées, les données obsolètes du cache sont invalidées en fonction du code que vous avez écrit.
La logique Change Stream est intégrée dans le NotifyExtensibleDependency
. Vous pouvez modifier ce flux de modifications pour recevoir des notifications sur les opérations d'ajout, de mise à jour ou de suppression qui ont lieu dans la base de données. Cependant, les opérations de suppression ne peuvent pas être suivies. Ainsi, pour suivre les opérations de suppression, une opération de mise à jour avec expiration est utilisée.
Il convient également de garder à l'esprit que Mongo DB ne prend pas en charge Change Stream pour les bases de données autonomes. Vous devez vous assurer que votre base de données Mongo DB dispose d'un jeu de répliques pour que la fonctionnalité Change Stream fonctionne.
NCache Détails NCache NotifyExtensibleDependency NCache Docs
Cache de synchronisation avec Mongo DB : un exemple rapide
Pour utiliser Mongo DB avec NCache vous devez configurer Dépendance personnalisée in NCache d'abord, puis déployez-le dans votre application cliente par la suite. Ceci est expliqué ci-dessous :
NCache Configuration de dépendance personnalisée
Pour utiliser la fonction de dépendance extensible basée sur les notifications de NCache avec Mongo DB, vous devez configurer la dépendance personnalisée on NCache d'abord et déployez vos fichiers DLL respectifs sur le NCache Server.
Dans le GIF ci-dessous, j'ai déployé un fournisseur nommé MongoDbNotifyExtensibleDependencyProvider
ainsi que toutes ses dépendances sur le cache. Il met en œuvre la ICustomDependencyProvider
interface. Il est responsable de la création d'un objet de dépendance pour le CacheItem. Pour que la dépendance soit déclenchée correctement, le NotifyExtensibleDependency
classe doit être implémentée. Cette classe écoutera le MongoDB Change Stream et déclenchera des dépendances lors du changement de données dans Mongo DB.
De plus, dans cet exemple, j'utilise une implémentation open source de ICustomDependencyProvider
ainsi que NotifyExtensibleDependency
Disponible sur GitHub.
NCache Détails Configuration de dépendance personnalisée Dépôt GitHub
Déploiement sur l'application cliente
Par exemple, vous souhaitez utiliser Mongo DB comme base de données pour votre boutique de commerce électronique et souhaitez mettre en cache les données fréquemment utilisées à l'intérieur NCache. Votre magasin contiendra les données de plus d'un million de produits et des millions de transactions auront lieu quotidiennement. NCache aidera à réduire la charge sur votre base de données Mongo DB, mais les données à l'intérieur du cache ont tendance à devenir obsolètes.
Avoir des données obsolètes dans le cache peut causer des problèmes pour vous et vos clients. Heureusement, la fonction Notification Based Extensible Dependency de NCache atténue le problème des données obsolètes assurant la fonctionnalité optimale de votre boutique E-Commerce.
Dans l'exemple suivant, un produit est chargé à partir de la base de données en fonction de son ID. Puis NotifyExtensibleDependency
est créé et enregistré pour le produit récupéré. Enfin, le produit, sous forme de CacheItem est inséré dans le cache avec la clé spécifiée.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Product product = LoadProductFromDatabase(productId); //This is the name of your provider deployed on a cache server string providerName = "MongoDbNotifyExtensibleDependencyProvider"; string key = "Product:" + product.Id ; IDictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("ConString", "mongodb://**.**.**.**:27017"); parameters.Add("DatabaseName", "productscollection"); parameters.Add("CollectionName", "products"); CacheItem item = new CacheItem(product); item.Dependency = new CustomDependency(providerName, parameters); _cache.Insert(key, item); |
NCache Détails NotifiyExtensibleDependencyNotifiyExtensibleDependency Opérations de cache dans NCache
Utilisation du fournisseur de lecture directe
Une autre caractéristique marquante de NCache est Fournisseur de lecture. Cette fonctionnalité vous permet de rechercher directement des données dans Mongo DB lorsqu'elles ne se trouvent pas dans le cache. Lorsque l'élément est trouvé dans la base de données, il est également automatiquement stocké dans le cache ; ainsi, vous faisant gagner un temps précieux. Vous pouvez utiliser cette fonctionnalité dans vos applications Mongo DB pour améliorer encore vos performances.
L'exemple de code suivant récupère un élément avec la lecture amont activée, correspondant à la clé spécifiée « Product:1001 » à l'aide de la Get<>
méthode.
1 2 3 4 5 6 7 8 9 |
// Specify the key of the item string key = "Product:1001"; // Specify the readThruOptions for read through operations var readThruOptions = new ReadThruOptions(); readThruOptions.Mode = ReadMode.ReadThru; // Retrieve the data of the corresponding item with reads thru enabled Product product = cache.Get(key, readThruOptions); |
NCache Détails Lire via la mise en cache Opérations de cache dans NCache
Conclusion
Pour résumer, NCache offre une solution flexible pour synchroniser les données entre Mongo DB et le cache, évitant ainsi l'incohérence des données. NCache, une solution de mise en cache distribuée en mémoire, peut être un support idéal pour Mongo DB pour maintenir des données à jour pour un accès et un traitement rapides.