Un de mes amis m'a dit que la direction de son supermarché envisageait d'opter pour un système de cache distribué pour améliorer les performances de leur application E-Commerce. Mais il n'était pas sûr que ce cache distribué leur donnerait la possibilité de rechercher des données avec SQL. La raison en est que la plupart des fonctionnalités de leur boutique en ligne dépendent des données de recherche et qu'ils ne peuvent pas se permettre de réécrire leur application. Et, si toutes leurs requêtes SQL finissent toujours par aller à la base de données, cela va à l'encontre de l'objectif d'utiliser un cache distribué.
Si vous êtes aux prises avec une situation similaire et avez besoin d'une solution rapide et fiable à tous vos problèmes de performances, alors NCache est exactement ce dont vous avez besoin. Poursuivez votre lecture pour en savoir plus.
NCache Détails Télécharger NCache Comparaison Des Éditions
Cache en tant que magasin de données
Maintenant, si nous stockons des données dans un cache pour les rendre disponibles pour une utilisation plus rapide, le problème expliqué par mon ami demeure ; le client souhaite interroger l'inventaire pour rechercher les produits souhaités. Eh bien, j'ai de bonnes nouvelles pour vous (et lui); NCache est entièrement équipé de SQL qui vous permet de interroger les données dans votre cache de la même manière que vous le feriez dans votre base de données.
Figure 1: NCache gestion de la charge des requêtes SQL
Attendez! Cela ne résout-il pas soudainement tous nos problèmes ? Comme le montre la figure 1, l'ensemble du catalogue de produits est stocké dans le cache, nous pouvons y implémenter des requêtes SQL et renvoyer le résultat directement à l'application - cela réduit considérablement le nombre total de déplacements vers le datable et puisque NCache est évolutif et fiable, il peut gérer des centaines de milliers de clients en même temps !
Requête SQL dans NCache - Exemple rapide
Supposons qu'un client ait l'ID produit d'un produit dont il est un consommateur fréquent, notez la requête ci-dessous, cela s'exécutera dans le cache (pas dans la base de données) et enverra le résultat à l'application.
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 |
// Pre-condition: Cache is already connected // Items are already present in the cache. // Provide Fully Qualified Name (FQN) of your custom class string query = "SELECT ProductName FROM FQN.Product WHERE ProductID > ?"; /// Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("ProductID",50000); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if the result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ProductName"); // Perform operations } } |
Le fait est que ces requêtes SQL dans le cache sont très utiles, mais elles fonctionnent après tout dans un cache ; alors…
Quel type de données est recherché dans le cache ?
NCache a deux vastes catégories dans lesquelles les données sont stockées. Il s'agit de données transactionnelles et de données de référence.
Données transactionnelles
Les données transactionnelles sont des données qui sont traitées comme une unité singulière dans le but de satisfaire une demande. Ceux-ci sont collectés à partir de la base de données en tant que résultats de requête et stockés dans un cache. Par exemple, étant donné le tableau de la base de données, le client demande tous les produits moins chers que 5 $, la sortie résultante stockée dans le cache est des données transactionnelles.
Figure 2 : Table des produits dans la base de données
1 |
SELECT * FROM Products WHERE UnitPrice <= 5.00 |
Figure 3 : résultat de la requête stocké dans le cache
Les données transactionnelles sont généralement stockées temporairement pour être traitées. Il est fréquemment mis à jour et les données anciennes et inutiles sont supprimées. SQL n'est pas nécessaire pour un seul objet et les recherches par clé sont utilisées pour les données d'objet à la place. Les données transactionnelles sont déjà des données de résultat de requête ; par conséquent, les requêtes SQL ne peuvent pas être exécutées dessus.
Donnée de référence
NCache vous permet de stocker de grandes quantités de données dans le cache pendant de plus longues périodes. Ce type de données est appelé données de référence. Les données de référence sont stockées sous une forme structurée et relationnelle, elles sont régulièrement mises à jour et synchronisées avec la base de données. Pour ces raisons, il est possible d'implémenter des requêtes SQL sur ces données dans le cache distribué.
Avec la mise en œuvre de NCache, la plupart des requêtes effectuées par le client sont exécutées dans le cache et les résultats sont renvoyés immédiatement. Cela réduit considérablement le nombre de déplacements effectués vers le cache, éliminant ainsi les déplacements excessifs vers la base de données, ce qui supprime tous les goulots d'étranglement des performances.
NCache Détails Syntaxe SQL dans NCache NCache Documents SQL
Fonctionnalités SQL dans NCache
NCache fournit une large gamme de Les fonctions SQL et des opérateurs qui vous permettent de rechercher et de supprimer des données dans le cache. Veuillez noter que l'extension SQL fournie par NCache ne prend pas en charge les commandes d'insertion et de mise à jour. Ces commandes sont directement implémentées dans la base de données.
Jetons un coup d'œil à certaines des fonctionnalités SQL en mémoire uniques fournies par NCache.
Utilisation de caractères génériques SQL dans NCache
NCache offre une recherche flexible avec deux caractères génériques distincts dans la fonction SQL COMME. Ceux-ci sont '?' et '*'
"?" est utilisé lorsqu'il y a un caractère devant qui doit être recherché. Par exemple, « part ? ». Cela effectuera une recherche dans le cache et pourrait donner un résultat partagé, net ou tout autre résultat similaire.
"*" est utilisé là où il peut y avoir zéro à n'importe quel nombre de caractères devant qui sont recherchés. Par exemple, "cha*" pourrait donner char, caractère, chaise ou tout autre résultat similaire.
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 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT * FROM FQN.Product WHERE ProductName LIKE ? AND Category LIKE ?"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("ProductName", "Cha?"); queryCommand.Parameters.Add("Category", "Edib*"); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ProductID"); // Perform operations } } |
Utilisation des fonctions d'agrégation SQL dans NCache
Fonctions d'agrégation sont utilisés dans SQL pour effectuer des opérations arithmétiques sur plusieurs valeurs et renvoyer une valeur singulière. NCache utilise ces fonctions d'agrégation pour effectuer des opérations sur les éléments de données mis en cache.
Certaines des fonctions d'agrégation prises en charge par NCache sont:
SOMME, COMPTE, MOYENNE, MIN, MAX
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT COUNT(*) FROM FQN.Products WHERE UnitPrice > 5"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set int result = reader.GetValue(1); } } |
Utilisation de SQL GROUP BY dans NCache
NCache vous permet de regrouper les données en fonction de vos critères fournis à l'aide de la PAR GROUPE une fonction. Mais il y a un hic, vous ne pouvez utiliser group-by que dans les requêtes contenant l'une des fonctions d'agrégation ci-dessus. Par example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT Category, COUNT(*) FROM FQN.Products WHERE UnitPrice > 5 Group By Category"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set int result = reader.GetValue(1); string category = reader.GetValue(0); } } |
Raisons NCache est un bon choix pour les applications .NET
Revenons à notre problème d'hypermarché. Avec la mise en place de NCache pour stocker le catalogue de produits et y implémenter des requêtes SQL, il y a maintenant une réduction significative du nombre de déplacements coûteux que l'application doit effectuer vers la base de données pour effectuer des requêtes et récupérer des données.
Voici quelques-uns des autres avantages de NCache qui viennent avec ceci :
- Pas de code supplémentaire : Étant donné que la plupart des requêtes sont effectuées dans le cache, aucun code supplémentaire ne doit être écrit pour accéder à la base de données à chaque fois.
- 100% natif .NET et .NET core: NCache est un .NET 100% natif et .NET core cache distribué qui vous permet de stocker, gérer et interroger vos données sous une forme fiable, contrairement à tout autre cache distribué et magasin de données.
- Réduction des coûts de bande passante : Les requêtes sont effectuées sur les données mises en cache et renvoyées à l'application, ce qui permet d'économiser beaucoup de temps et de coûts de bande passante.
- Extrêmement rapide et fiable : NCache est un cache distribué extrêmement rapide et évolutif spécialement conçu pour votre .NET et .NET core applications. Vérifiez NCache référence de deux millions de transactions par seconde.
Donc, comme vous pouvez le voir, c'est une situation totalement gagnant-gagnant !
Rendez-vous sur NCache Docs pour en savoir plus sur l'utilisation de SQL dans votre magasin de données de cache distribué.