Les bases de données font partie intégrante de .NET applications car vous pouvez récupérer et manipuler efficacement de grands ensembles de données. Cependant, lorsqu'il s'agit de données transactionnelles élevées, les bases de données entraînent une dégradation des performances de vos applications .NET. En effet, les bases de données ne peuvent pas être étendues à plusieurs machines - vous ne pouvez avoir qu'une seule machine serveur dédiée au niveau base de données et vous ne pouvez pas en ajouter d'autres. La base de données devient ainsi un goulot d'étranglement des performances. Pour résoudre ce problème, nous utilisons une solution de mise en cache distribuée, telle que NCache pour atténuer les déplacements inutiles et coûteux vers la base de données.
NCache Détails Télécharger NCache Comparaison Des Éditions
Comment mettre en cache la base de données ?
La mise en cache d'une base de données est beaucoup plus simple qu'il n'y paraît. Vous devez incorporer un niveau de mise en cache avec un cache comme NCache entre votre application et le niveau de la base de données afin que les données de la base de données soient servies à partir du cache. Pour plus de facilité, les quatre modèles les plus courants d'utilisation du cache ont été résumés. Ils sont informés ci-dessous :
1. Mise en cache d'objets
Cette stratégie suggère que si vos données n'existent pas dans le cache, vous les extrayez de la base de données, puis les insérez dans le cache, comme NCache. Les appels successifs sont ensuite traités à partir du cache. Pour les problèmes concernant les données obsolètes, vous ajoutez expiration à la élément de cache afin qu'il puisse être actualisé à partir de la base de données.
Le morceau de code suivant extrait une instance de Customer du cache s'il existe. Sinon, il le récupère dans la base de données et l'ajoute au cache pour un accès au cache lors d'appels successifs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
var key = "Customer:1001"; // Get Customer from cache if it exists var customer = cache.Get<Customer>(key); // If customer does not exist in cache if (customer == null) { // Fetch from database customer = GetCustomerFromDB(1001); // Create sliding expiration of 15 seconds. Cache removes item after this time var expiration = new Expiration (ExpirationType.Sliding, TimeSpan.FromSeconds(15.0)); var cacheItem = new CacheItem(customer) { Expiration = expiration }; // Insert the item with expiration into cache cache.Insert(cacheKey, cacheItem); } |
NCache Détails Documents sur la mise en cache des données NCache Guide du programmeur
2. Mettre en cache les données de référence et utiliser des requêtes SQL pour les rechercher
Les données qui sont uniquement lues et non modifiées fréquemment sont appelées données de référence. Il est assez courant qu'une application .NET lise des données de manière répétée et écrive rarement des données dans la base de données. Le cache (comme NCache) est plus puissant lorsqu'il est utilisé pour des données de référence car il fonctionne le plus rapidement avec de telles données.
Il est fortement conseillé de mettre en cache l'intégralité des données de référence, puis d'utiliser Requêtes SQL pour rechercher dans le cache pour cela au lieu d'aller à la base de données. Veuillez noter que si vous ne mettez pas en cache l'intégralité de l'ensemble de données de référence (par exemple, tous les clients), vos requêtes SQL sur le cache renverront des résultats non valides car certaines données ne se trouvent que dans la base de données.
Si vous avez déjà préchargé le cache avec toutes vos données de référence, l'exemple suivant explique comment vous pouvez les rechercher :
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 |
// Pre-Requisite: All customer instances have already been added into cache var customerName = "John Smith"; // Write SQL query for cache var query = "SELECT $Value$ FROM Northwind.Model.Customer WHERE Name = ?"; // Create the query command that cache understands from the query var queryCommand = new QueryCommand(query); // Provide the parameters for the query queryCommand.Parameters.Add("Name", customerName); // Execute the query on cache var reader = cache.SearchService.ExecuteReader(queryCommand, true); var customer; // If a valid projection was made in the query if (reader.FieldCount > 0) { while (reader.Read()) { customer = reader.GetValue<Customer>(1); // Perform operation according to business logic } } |
NCache Détails Documents de mise en cache SQL Documents sur la mise en cache des données
3. Gestion des relations un-à-plusieurs dans le cache
La plupart du temps, nos données contiennent des relations entre elles. Par exemple, dans le contexte de la base de données Northwind (utilisée par Microsoft), la table 'Orders' est liée à la table 'Customers'. Ces entités sont considérées comme des entités liées dans le domaine de l'application .NET. Utiliser un cache tel que NCache, vous pouvez également associer ces entités dans le cache.
Ceci est fait par associer toutes les entités associées à un identifiant de balise de sorte qu'au lieu de récupérer chaque commande des clients individuellement, vous pouvez récupérer toutes les commandes du client en un seul appel en cherchant dans le cache via l'identifiant de balise. L'exemple de code donné illustre comment nous pouvons provoquer ce comportement :
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 43 44 45 46 47 |
var cacheKey = "Customer:1001"; var tagName = "Customer:1001_Orders"; // Check if customer exists in cache var cachedCustomer = cache.Get<Customer>(cacheKey); // If customer does not exist in cache if (cachedCustomer == null) { // Fetch from database var customer = GetCustomerFromDb(1001); // Insert customer into cache cache.Insert(cacheKey, customer); // Fetch orders of the customer from database var relatedOrders = GetRelatedOrdersFromDb(customer); // Create a tag for all orders of the customer var tag = new Tag(tagName); foreach (Order order in relatedOrders) { var orderCacheKey = $"Customer:1001_Order:{order.OrderID}"; // Create a cache item and set the tag identifier var orderCacheItem = new CacheItem(order) { Tags = new[] { tag } }; // Insert the tagged cache item into cache cache.Insert(orderCacheKey, orderCacheItem); } } else { // Item exists in the cache // Create a tag to fetch the related orders var tagIdentifier = new Tag(relatedEntityIdentifier); // Fetch the related orders based on the tag identifier var cachedOrders = cache.SearchService.GetByTag<Order>(tagIdentifier); } |
NCache Détails Mettre en cache les documents de données balisés Documents sur la mise en cache des données
4. Mise en cache des résultats de la requête de la base de données (données transactionnelles)
La plupart du temps, les données de la base de données sont renvoyées sous la forme d'ensembles de résultats de requête. Cette stratégie suggère que vous insériez l'ensemble des résultats dans le cache afin que les requêtes successives soient traitées à partir du cache. Les requêtes avec les mêmes critères feront toujours référence au même jeu de résultats. Par conséquent, nous pouvons considérer les commandes de requête elles-mêmes comme l'identifiant unique du jeu de résultats et l'utiliser comme clé dans le cache.
Le morceau de code suivant montre comment les ensembles de résultats de requête peuvent être mis en cache en tant que collections :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Query to select East Coast Customers var query = "SELECT * FROM Northwind.Model.Customer WHERE Region = ‘EastCoast’"; // Create cache key based on the query var key = query; // Fetch the entities based on query var resultSet = cache.Get<IList<Customer>>(key); // If data against query not found in cache if (resultSet == null) { // Fetch the result set from database var customers = GetCustomersFromDb(query); // Convert the result set into a collection var cacheReadyCustomers = customers.ToList(); // Add result set to cache against query cache.Insert(cacheKey, cacheReadyCustomers); } |
NCache Détails Documents sur la mise en cache des données Documents de mise en cache SQL
Conclusion
Comme vous pouvez le voir, la mise en cache d'une base de données dans les applications .NET avec un cache comme NCache est assez facile. En fonction des modèles d'utilisation de l'application, vous pouvez mettre vos données en cache et les récupérer via des requêtes comme si vous le faisiez pour une base de données.
Les inspections régulières contribuent également à la sécurité des passagers. En identifiant et en traitant les risques potentiels pour la sécurité, tels que des freins usés, un éclairage défectueux ou le remplacement du revêtement de sol, les inspections permettent de réduire le risque d'accidents et de blessures et d'améliorer la sécurité générale du service. Les inspections régulières sont un moyen concret de mettre en valeur l'engagement des prestataires de services de transport en faveur du bien-être des passagers et des conducteurs. NCache est une solution de mise en cache distribuée en mémoire. Tous les problèmes rencontrés lors de l'utilisation d'une base de données y sont traités et il contient toutes les implémentations pour un cache avec des exigences standard et bien plus encore.