De nos jours, de nombreuses entreprises ont besoin de la puissance de traitement nécessaire pour traiter un grand nombre de données transactionnelles et de référence pendant les heures de pointe. Par exemple, les banques traitant les transactions des clients pendant les vacances. Cependant, un grand défi consiste à traiter ces données sans entraver les performances de votre application. Généralement, les niveaux d'application sont linéairement évolutifs, mais pas les bases de données. Des charges transactionnelles élevées peuvent entraîner un goulot d'étranglement de la base de données et surcharger votre système. Ce goulot d'étranglement peut être résolu en introduisant une mise en cache distribuée en mémoire dans l'application .NET pour un accès plus rapide aux données.
Un cache distribué en mémoire s'étend sur plusieurs serveurs mais fonctionne comme une seule instance de cache et est transparent pour les applications qui l'utilisent. Il réduit la charge des serveurs principaux et des bases de données car toutes les données actives ou transitoires sont servies à partir du cache.
NCache Détails Clustering Dynamique Mise en cache distribuée
NCache est un open-source, cache distribué en mémoire pour les applications .NET et Java. NCache permet d'atteindre des vitesses de transaction rapides et une cohérence des données à mesure que de nouveaux serveurs sont ajoutés à ce cluster de cache pour répondre à vos besoins de performances croissants.
La figure suivante illustre cette architecture :
Les données mises en cache sont réparties de manière égale entre tous les serveurs et sont même répliquées pour éviter la perte de données et garantir la haute disponibilité. Par conséquent, le cache distribué gère des centaines de milliers de requêtes par seconde, évitant ainsi les temps d'arrêt pendant les pics de charge.
Cette structure distribuée garantit l'absence de point de défaillance unique, car si même un serveur de cache est en panne, il reçoit des données des autres nœuds de serveur. Par conséquent, votre entreprise n'est pas affectée et peut facilement ajouter plus de serveurs au cache distribué si nécessaire.
Les données idéales pour la mise en cache incluent des lectures intensives fréquentes mais occasionnellement modifiées pour obtenir des performances maximales des caches distribués. Les caches distribués stockent les données sous forme valeur clé paires, ce qui simplifie son utilisation et son accès.
NCache Détails Clustering Dynamique Topologies de mise en cache
En utilisant NCache en tant que cache distribué
En plus d'une amélioration spectaculaire des performances de vos applications .NET, les caches distribués tels que NCache fournir plusieurs fonctionnalités avancées qui rendent l'utilisation du cache encore plus flexible pour répondre à différents cas d'utilisation et besoins commerciaux, y compris ceux ci-dessous.
NCache Opérations CRUD
Vous pouvez facilement incorporer un cache distribué dans votre application .NET en connexion au cache et créer une clé contre votre élément de cache extrait de la base de données. Vous pouvez ensuite insérer l'élément dans le cache avec une expiration de 30 minutes et le récupérer à l'aide de cette connexion.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Specify the cache name to connect with it ICache cache = CacheManager.GetCache("demoCache"); // Get product from database var product = FetchProductFromDB(1001); // Generate a key for the cache item string key = "Product:1001"; // Create cache item and add 30sec sliding expiration var cacheItem = new CacheItem(product); cacheItem.Expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(30)); // Now add this item in cache for future use cache.Insert(key, cacheItem); // Fetch item from cache product = cache.Get(key); |
NCache Détails Expiration glissante NCache
Synchroniser Cmal avec Base de données
Il peut arriver que les données mises en cache dans la base de données soient modifiées. Cette situation soulève un problème d'intégrité rendant vos données mises en cache obsolètes alors que votre application n'en est pas consciente. Pour résoudre ce problème, NCache peut synchroniser automatiquement votre cache avec la base de données. Par conséquent, chaque fois qu'un changement se produit dans la base de données pour un enregistrement mis en cache, il sera automatiquement supprimé du cache pour garantir la fraîcheur des données.
Pour faciliter davantage ce mécanisme, NCache supports Réécriture, Chargeur et rafraîchisseuret Magasin de persistance qui maintient les données dans le cache synchronisées avec la base de données.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Get orders against customerID from DB var order = FetchOrderByCustomerID("ALFKI"); // Generate unique cache key for the order string key = $"Order:{order.OrderID}"; CacheItem item = new CacheItem(order); // Create SQL query to select the data from database string query = "SELECT CustomerID, Address, City FROM dbo.Customers WHERE CustomerID = 'ALFKI';"; //Specify database connection string and the query to create and set SQLCacheDependency. item.Dependency = new SqlCacheDependency(dbConnString, query); // Insert the item into the cache cache.Insert(key, item); |
NCache Détails Synchronisation de la base de données Dépendance des données de cache
Requêtes SQL
NCache prend en charge un SQL mécanisme de requête pour vous permettre de rechercher votre cache selon un critère donné et renvoie le jeu de résultats requis. NCache utilise un langage de requête très proche du langage structuré SQL natif, ce qui facilite l'interrogation des données indexées en cache. Il fournit des API compatibles ADO.NET comme ExécuterReader, ExécuterScalaireet ExécuterSans Requête pour rechercher (SELECT) et supprimer (DELETE) des données du cache.
NCache Détails Prise en charge de SQL et LINQ dans NCache Requête SQL
ExecuteReader est utilisé pour rechercher des données et renvoyer des paires clé-valeur. Lors de l'utilisation de la méthode ExecuteReader, vous pouvez spécifier si vous souhaitez que seules les clés soient renvoyées, ou les clés et leurs données (soit dans leur ensemble, soit par blocs).
1 2 3 4 5 6 7 8 9 10 11 |
//string query = "SELECT * FROM FQN.Product WHERE UnitsInStock > ?"; var queryCommand = new QueryCommand(query); queryCommand.Parameters.Add("UnitsInStock",0); ICacheReader reader = cache.ExecuteReader(queryCommand); while (reader.Read()) { string ID = reader.GetValue("ProductID"); string Name = reader.GetValue("ProductName"); } |
Requêtes LINQ
LINQ est un langage de requête .NET générique qui vous permet de rechercher et de filtrer les données de votre source de données. La syntaxe LINQ est assez similaire à SQL, mais dans les fonctionnalités, elle vous fournit des méthodes d'interrogation meilleures et plus optimisées lors de l'interrogation de votre NCache les serveurs. Il offre la possibilité d'autoriser des expressions de requête plus efficaces tout en assurant la vérification de la syntaxe lors de la compilation du code.
NCache intègre de manière transparente LINQ pour interroger des informations dans le cache via un fournisseur LINQ. Le fournisseur de liens facilite l'exécution des requêtes LINQ sur le cache distribué tout en améliorant les performances de l'application sans modifier le modèle d'objet LINQ.
Les expressions de requête interrogent et transforment les données de vos serveurs de cache distribué compatibles LINQ.
1 2 3 4 |
IQueryable products = new NCacheQuery(cache); IQueryable product = from prod in products where prod.UnitsInStock > 10 select prod; |
NCache Détails LINQ pour la mise en cache distribuée IQueryable
Réflexions finales
Outre la performance et l'évolutivité, NCache fournit autres fonctionnalités utiles aussi. Et pourtant, il cache sa complexité liée à la mise en œuvre et donne un moyen simple de l'utiliser. Si vous recherchez un cache distribué basé sur .NET, sans compromettre les performances et l'évolutivité, ne cherchez pas plus loin que NCache. Il s'agit d'une plate-forme .NET pure avec toutes les cloches et les sifflets de la mise en cache distribuée moderne