As tu entendu a propos de eBay en utilisant MongoDB comme base de données principale ? Maintenant, pourquoi une entreprise multinationale de commerce électronique comme eBay utiliserait-elle MongoDB et non un SGBDR traditionnel ? C'est parce que MongoDB a été un sujet brûlant parmi les développeurs pour son magasin clé-valeur distribué et orienté document NoSQL fonctionnalités. Et, si eBay l'utilise, je suis sûr que votre application de commerce électronique utilise également MongoDB.
Oubliez eBay. Prenons votre application de commerce électronique et disséquons ses données de base et ses besoins en performances. Maintenant dans votre .NET/.NET Core app, avez-vous déjà eu l'impression que les performances étaient compromises parce que vous avez des requêtes limitées par seconde ? Avez-vous remarqué le délai des appels en lecture/écriture vers votre base de données sur disque ? Avez-vous eu le sentiment que même avec toutes ses merveilleuses fonctionnalités, MongoDB manque toujours d'un certain lien qui pourrait apporter la gloire à votre application ?
Ceci, mon ami, est l'endroit où quelqu'un (moi) vous pousse (seulement virtuellement) et vous présente NCache dans votre vie. NCache est en mémoire, distribué et très évolutif cache qui reste juste à côté de votre application à tout moment ; améliorant le taux de transaction et en faisant ainsi la solution parfaite pour tous vos besoins de mise en cache. Voyons comment vous pouvez tirer le meilleur parti de votre application en utilisant NCache.
NCache Détails Synchroniser le cache avec la base de données NCache NoSql Datastore
En utilisant NCache en tant que cache distribué avec MongoDB
Avec une application de commerce électronique hautement transactionnelle comme la vôtre qui s'exécute dans un environnement multiserveur, vous ne pouvez pas vous permettre d'avoir un seul cache de serveur pour recevoir toutes vos demandes de données. Plus la charge de votre application est élevée, plus il y a de chances que votre cache s'étouffe avec les requêtes.
Il peut arriver un moment au cours de l'exécution de votre application où la charge de transaction sur votre application augmente et le nombre de serveurs de cache initialement configurés n'est pas tout à fait suffisant pour traiter les requêtes entrantes. C'est ici que NCache fait évoluer votre application en toute transparence en vous permettant de ajouter des serveurs de cache supplémentaires lors de l'exécution ainsi le cache ne devient jamais un goulot d'étranglement pour votre application. Par conséquent, assurer des performances optimales dans votre .NET/.NET Core .
Pour obtenir une image correcte de l'endroit exact NCache se trouve dans votre pile d'applications, examinons l'architecture de base.
MongoDB est considéré comme plus évolutif que les bases de données relationnelles, mais le fait qu'il s'agisse d'un magasin de données sur disque reste un inconvénient. Ainsi, en utilisant NCache vous fournit une mise en cache des données basée sur la mémoire tout en restant à l'intérieur ou à l'extérieur du réseau virtuel de votre application (totalement votre appel). Cela rend vos processus d'application beaucoup plus rapides que souhaité, réduisant ainsi la latence.
Cela ne vous donne-t-il pas plus de raisons d'utiliser NCache pour mettre en cache les données de votre base de données ? Ne nous arrêtons pas ici et plongeons un peu plus dans ce NCache apporte à la table.
NCache Détails Synchroniser le cache avec la base de données NCache NoSql Datastore
Comment mettre en cache avec MongoDB
La mise en cache avec MongoDB est extrêmement simple. Que vous souhaitiez rechercher une donnée spécifique dans le cache, ou interroger la base de données elle-même pour récupérer les données requises, ou tout simplement ajouter de nouvelles données à la base de données, tout peut être fait avec la plus grande facilité en utilisant NCache.
L'extrait suivant explique comment effectuer toutes ces opérations susmentionnées dans votre application de commerce électronique. Ici, nous recherchons un client très fidèle et intelligent à vous, Einstein, dans le cache pour effectuer Opérations CRUD dessus. Et si le cache ne contient pas le client demandé, nous le recherchons dans la base de données. Une fois récupéré, nous ajoutons ce client au cache avec un expiration de 5 minutes. Ceci est fait pour que le cache n'a jamais de données obsolètes à vous offrir. Par conséquent, assurer la cohérence des données.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var customer = cache.Get("Customer:CustomerID:EINSTEIN"); if (customer == null) { MongoClient mongoClient = new MongoClient("mongodb://20.200.20.10:27017"); IMongoDatabase mongoDatabase = mongoClient.GetDatabase("DemoDatabase"); IMongoCollection <Customer> mongoCollection = mongoDatabase.GetCollection<Customer>("Customers"); response = mongoCollection.FindAsync<Customer>(x => x.Id == "EINSTEIN").GetAwaiter().GetResult().ToList<Customer>(); customer = (Customer)response.FirstOrDefault(); var expiration = new Expiration(ExpirationType.Absolute, TimeSpan.FromMinutes(5)); var cacheItem = new CacheItem(customer) { Expiration = expiration }; cache.Insert($"Customer:CustomerID:{customer.Id}", cacheItem); } |
NCache Détails Synchroniser le cache avec la base de données NCache NoSql Datastore
Mise en cache de la collection d'éléments de base de données
Le plus grand avantage d'introduire NCache à votre application et à la base de données est que les déplacements vers la base de données en particulier pour opérations de lecture réduire considérablement, réduisant les appels réseau inutiles et améliorant les performances. La seule raison de ce placement logique est que chaque fois que vous souhaitez récupérer des éléments de la base de données et y effectuer des opérations, vous pouvez tout faire dans le niveau de mise en cache.
Pour y parvenir, NCache vous permet de mettre en cache une collection MongoDB en tant que élément de cache ou un élément individuel en tant qu'élément de cache unique. Voyons comment mettre en cache des éléments sous forme de paires clé-valeur dans NCache de MongoDB.
Collection de cache en tant qu'élément unique
Mise en cache d'une collection d'éléments en un seul CacheItem est pratique lorsque les articles sont similaires ou appartiennent à la même catégorie. Par exemple, supposons que la base de données de votre application contienne une liste de clients répartis dans le monde entier, mais que vous souhaitiez interroger ceux qui vivent en Allemagne (car votre Einstein toujours préféré vient d'Allemagne). Vous souhaitez que cette requête renvoie tous ces clients sous la forme d'une seule liste afin que cette liste puisse être ajoutée au cache. Voici comment procéder :
1 2 3 4 5 6 7 |
var customersInGermany = mongoCollection.FindAsync(x => x.Country == 'Germany').GetAwaiter().GetResult().ToList(); if(customersInGermany > 0) { var expiration = new Expiration(ExpirationType.Absolute, TimeSpan.FromMinutes(5)); var cacheItem = new CacheItem(customersInGermany) { Expiration = expiration }; cache.Insert("CustomersInGernamy", cacheItem); } |
Mettre en cache les éléments de collection séparément
Dans le cas où vous souhaitez associer des informations supplémentaires à chaque élément comme étiquettes, étiquettes de nomet groupes pour faciliter la récupération des données, vous devez mettre en cache chaque élément séparément à l'aide d'identificateurs uniques. De cette façon, vous pouvez récupérer plusieurs éléments en fonction d'une balise logique, par exemple, tous les clients résidant en Allemagne.
Pour mettre en cache tous les clients qui vivent en Allemagne, vous pouvez ajouter la balise Customer:Country:Germany
avec le jeu de données de la requête. Voici un exemple de mise en cache de tous les clients allemands avec la balise "Allemagne".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var customersInGermany = mongoCollection.FindAsync(x => x.Country == 'Germany').GetAwaiter().GetResult().ToList(); if(customersInGermany > 0) { var expiration = new Expiration(ExpirationType.Absolute, TimeSpan.FromMinutes(5)); foreach (var customer in customersInGermany) { cacheItem = new CacheItem(customer) { Tags = new[] { new Tag("Customer:Country:Germany") }, Expiration = expiration }; cache.Add($"Customer:CustomerID:{customer.Id}", cacheItem); } } |
Jusqu'à présent, nous avons discuté en détail de la façon de jongler avec les données entre votre application et MongoDB en utilisant NCache. Vous pouvez savoir à quel point il est facile d'accéder aux données et de les manipuler en effectuant Opérations CRUD sur tout ça à cause de NCache. Permettez-moi maintenant de vous faire découvrir brièvement comment NCache apporte efficacité au plat; la cerise sur le gâteau si vous le permettez.
Voici quelques-unes des fonctionnalités qui NCache fournit pour améliorer les performances de votre application de commerce électronique qui utilise MongoDB.
NCache Détails Synchroniser le cache avec la base de données NCache NoSql Datastore
Éliminer les coûts de sérialisation avec le cache sérialisé JSON
MongoDB stocke les données sous forme de JSON binaire (BSON), qui est la sérialisation codée en binaire de documents de type JSON. Cela fonctionne parfaitement avec NCache car il soutient le Sérialisation JSON des objets. Ce MongoDB-NCache La collaboration améliore non seulement le temps de performance de votre application en évitant d'avoir à sérialiser/désérialiser les données, mais maintient également l'exactitude de vos données.
1 2 3 4 5 |
var response = mongoCollection.FindAsync<Customer>(x => x.Id == "EINSTEIN").GetAwaiter().GetResult().ToList<Customer>(); Customer customer = (Customer)response.FirstOrDefault(); JObject customerJson = JObject.Parse(JsonSerializer.Serialize(customer)); cache.Insert($"Customer:CustomerID:{customer.Id}", customerJson); customer = cache.Get<Customer>($"Customer:CustomerID:EINSTEIN "); |
Fournisseurs de sources de données pour l'optimisation des ressources
NCache fournit Fournisseurs de sources de données pour garantir une entrée unique dans la couche d'accès aux données de votre application ; le point d'entrée étant votre cache. Si les données ne sont pas disponibles dans le cache, un Lire à travers Le fournisseur est responsable de l'accès à la base de données, de la recherche et de la récupération des données requises, de leur mise en cache pour une utilisation future et de leur présentation à l'application.
1 |
var customer = cache.Get<Customer>( "EINSTEIN", new ReadThruOptions(ReadMode.ReadThru, "mongoDBReadThroughProvider")); |
De même, vous avez un Réécriture fournisseur lorsque vous souhaitez exécuter une opération d'écriture sur la base de données. Vous n'avez qu'à effectuer l'opération requise sur le cache et le cache écrira automatiquement les données dans la base de données pour vous. Ajoutons "Einstein 2" dans le cache pour qu'il ajoute la version 2.0 de votre client préféré dans la base de données en utilisant WriteThru
.
1 2 3 4 |
Customer customer = new Customer(); customer.Id = "EINSTEIN2"; ... cache.Insert(customer.Id,new CacheItem(customer),new WriteThruOptions(WriteMode.WriteThru,"mongoDBWriteThroughProvider"); |
NCache Détails Synchroniser le cache avec la base de données NCache NoSql Datastore
Interroger les données du cache
Lors de l'utilisation NCache en tant que couche de mise en cache intermédiaire entre votre application .NET et MongoDB, NCache vous offre la possibilité de rechercher des données indexées en cache via des requêtes. L'interrogation des données du cache en mémoire réduit directement le coût du trajet qu'une requête devrait normalement effectuer sur un réseau.
Un exemple d'extrait de code illustrant l'utilisation de l'interrogation de données indexées dans NCache est montré ici:
1 2 3 4 5 6 7 8 9 10 11 12 |
string query = "SELECT * FROM Models.Customer WHERE Country == ?"; var queryCommand = new QueryCommand (query); queryCommand.Parameters.Add("Country", "Germany"); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ContactName"); // Perform operations } } |
Tout conclure
Considérant l'ensemble des fonctionnalités et caractéristiques qui NCache vous propose, il est sûr de conclure qu'aucune meilleure correspondance ne peut être faite que NCache mise en cache de MongoDB. Voici pourquoi. MongoDB est éloigné de votre application ; vous avez besoin d'une solution qui reste proche pour des performances accrues : NCache fournit cela en étant en mémoire. Vous avez besoin d'une solution qui vous permette d'ajouter un nombre illimité de serveurs au moment de l'exécution : évolutive de manière linéaire NCache vous apporte cela. Vous recherchez une solution flexible qui rééquilibre automatiquement et dynamiquement vos données : NCache fait exactement cela sans aucune interférence du client.
NCache offre beaucoup trop de performances, de réduction des coûts, de flexibilité, d'évolutivité, alors que recherchez-vous d'autre alors ? Va chercher NCache et profitez de la mise en cache !