Une gestion efficace des données nécessite la capacité de rechercher rapidement des données d'application en fonction d'attributs spécifiques. À mesure que le volume de données augmente, ce besoin devient encore plus crucial. Généralement, les bases de données ont déjà des champs qui facilitent la catégorisation des données, et ces champs peuvent être utilisés comme index lors de la mise en cache des données. Cependant, il peut arriver que vous souhaitiez regrouper des données en fonction d'attributs qui ne sont pas présents dans le cache, tels que des balises ou d'autres attributs personnalisés.
Avec NCache, vous pouvez non seulement catégoriser les données d'application en fonction d'attributs personnalisés, mais vous pouvez également effectuer des recherches en fonction de ces attributs. En plus de l'indexation traditionnelle, NCache offre la possibilité de catégoriser les données à l'aide Groupes, Tagset Balises nommées, permettant une plus grande flexibilité dans la catégorisation et la récupération des données.
Catégorisation des données du cache via des groupes
Pour une collection d'éléments qui ont été mis en cache et peuvent être identifiés par un nom de groupe, vous pouvez créer un groupe. Ce nom peut aider à récupérer tout élément appartenant à un groupe. Par exemple, vous pouvez créer un groupe avec tous les produits associés à un certain client ou à une certaine catégorie de produits. Le simple fait d'appeler le nom entraînera NCache pour renvoyer tous les éléments mis en cache qui lui sont associés. Veuillez noter qu'il ne peut y avoir qu'un seul article associé à un seul groupe. L'exemple ci-dessous montre comment les clients d'une région différente (côte Est dans ce cas) sont regroupés dans une boutique en ligne.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Pre-conditions: Cache is already connected. // Create a unique cache key for this customer. string customerKey = $"Customer:ALFKI"; // Get customer from cache Customer customer = cache.Get<Customer>(customerKey); // Get customer from database if not found in cache if (customer == null) { customer = FetchCustomerFromDB("ALFKI"); // Create a new CacheItem var cacheItem = new CacheItem(customer); // Specify the group cacheItem.Group = "East Coast Customers"; // Add customer object to cache with group cache.Add(customerKey, cacheItem); } |
Vous pouvez utiliser des requêtes SQL pour rechercher des objets de cache contenus dans des groupes à l'aide du mot-clé $Group$. L'exemple de code qui suit montre comment utiliser une requête SQL pour afficher tous les clients d'une région particulière, dans ce cas, la côte ouest.
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 |
// Pre-conditions: Items with groups exist in the cache // Custom class is query indexed through the NCache Manager or config.ncconf // Create an SQL Query with the specified criteria // Make sure to use the Fully Qualified Name (FQN) string query = "SELECT CustomerID,ContactName FROM Alachisoft.NCache.Samples.Data.Customer WHERE $Group$ = ? "; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("$Group$", "West Coast Customers"); // Executing the Query ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Read results if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set string customerID = reader.GetValue<string>("CustomerID"); string customerName = reader.GetValue<string>("ContactName"); Console.WriteLine($"Customer '{customerName}' having ID '{customerID}' belongs to West Coast."); } } else { Console.WriteLine($"No customers from West Coast found"); } |
En plus d'accroître l'efficacité, les groupes permettent aux utilisateurs de récupérer or effacer données basées sur ces catégories logiques qui augmentent l'évolutivité de votre application. De plus, les groupes peuvent mettre en cache les données couramment utilisées qui correspondent à certains critères de recherche, évitant ainsi le coût de l'exécution répétée de recherches dans la base de données.
- NCache Détails
- Supprimer les données avec le groupe
- Mettre à jour les données du cache avec des groupes
Catégorisation des données du cache via des balises
Tags in NCache fournir un moyen de catégoriser les éléments mis en cache à l'aide de plusieurs balises. Un objet mis en cache peut avoir une ou plusieurs balises qui lui sont attribuées, qui peuvent être utilisées pour récupérer l'élément. Par exemple, vous pouvez classer les articles en fonction de leur région, de leur langue ou des caractéristiques du produit. L'appel du nom d'un tag entraînera NCache pour renvoyer tous les éléments qui ont cette balise et sont mis en cache. Les balises vous permettent de lier des métadonnées à vos objets mis en cache, ce qui facilite la recherche et la manipulation des données. L'exemple suivant montre comment un client qui s'est connecté depuis la région de la côte est sera ajouté au cache.
1 2 3 4 5 6 7 8 9 10 11 |
// Create an array of tags assigned to customer Tag[] tags = new Tag[2]; tags[0] = new Tag("East Coast Customers"); tags[1] = new Tag("VIP Customers"); // Setting the tag property of the cacheItem cacheItem.Tags = tags; cache.Add(customerKey, cacheItem); // CacheItem added successfully |
De même, vous pouvez interroger un élément ayant un mot-clé de balise spécifique $Tag$. La requête SQL dans l'exemple ci-dessous renvoie chaque élément lié à la balise Clients VIP.
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 |
// Create a query for search string query = "Select CustomerID,ContactName FROM Alachisoft.NCache.Samples.Data.Customer WHERE $Tag$ = ?"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); queryCommand.Parameters.Add("$Tag$", "VIP Customers"); // Executing Query ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Read results if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set string customerID = reader.GetValue<string> ("CustomerID"); string contactName = reader.GetValue<string>("ContactName"); Console.WriteLine($"Customer '{contactName}' having ID '{customerID}' is a VIP Customer."); } } else { Console.WriteLine($"No VIP Customers found"); } |
L'utilisation de balises donne à l'utilisateur un haut niveau de pertinence avec chaque type spécifique. Pour connaître les autres opérations CRUD proposées par les Tags, veuillez vous référer au NCache Documentation.
Catégorisation des données du cache via des balises nommées
Un objet mis en cache peut recevoir plusieurs balises nommées, via une liste, qui peuvent ensuite être utilisées pour récupérer l'élément. Chaque balise nommée a deux paramètres : une clé qui est une chaîne représentant le nom de la balise et une valeur qui est n'importe quel type primitif. Par exemple, vous pouvez attribuer des balises nommées aux articles en fonction de leur gamme de prix ou de leur disponibilité. L'appel du nom et de la valeur de la balise entraînera NCache pour renvoyer tous les éléments stockés qui ont la balise nommée spécifiée lorsque vous avez besoin d'obtenir tous les éléments avec cette balise.
Comme pour les groupes et les balises, vous pouvez récupérer des éléments du cache avec des balises nommées à l'aide de requêtes d'objet. Lorsque certaines balises nommées sont déjà ajoutées aux éléments du cache, NCache offre à l'utilisateur la possibilité de mettre à jour ces balises nommées. En utilisant NCachede la classe personnalisée, c'est-à-dire CacheItem, vous pouvez ajouter des données au cache. En tant que propriété du Balises nommées classe, CacheItem vous permet en outre de spécifier des spécifications supplémentaires liées à un élément. Dans l'exemple ci-dessous, un client avec un abonnement VIP (les membres VIP bénéficient d'une réduction de 10 %), les balises nommées sont définies en les attribuant en tant que propriété de CacheItem.
1 2 3 4 5 6 7 8 9 |
// Creating a Named Tags Dictionary var namedTags = new NamedTagsDictionary(); // Adding Named Tags to the Dictionary where Keys are the names of the tags as string type and Values are of primitive type namedTags.Add("VIP_Membership_Discount", 0.10); // Setting the named tag property of the cacheItem cacheItem.NamedTags = namedTags; cache.Add(customerKey, cacheItem); |
Lorsqu'un élément est ajouté au cache avec les balises nommées, vous pouvez facilement le récupérer via la requête SQL. Dans l'exemple suivant, l'utilisateur souhaite voir tous les clients bénéficiant d'une réduction de 12 % sur l'adhésion VIP.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// Create an SQL Query with the specified criteria string query = "SELECT CustomerID,ContactName FROM Alachisoft.NCache.Samples.Data.Customer WHERE VIP_Membership_Discount = 0.12 "; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Executing the Query ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Read results if the result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set string customerID = reader.GetValue<string>("CustomerID"); string customerName = reader.GetValue<string>("ContactName"); Console.WriteLine($"Customer '{customerName}' with ID '{customerID}' has VIP membership discount."); } } else { Console.WriteLine($"No VIP members found"); } |
Conclusion
Clairement NCache offre une variété de fonctionnalités puissantes pour une mise en cache et une recherche efficaces des données via des groupes, des balises et des balises nommées afin de catégoriser les données mises en cache en fonction d'attributs spécifiques et de les récupérer à l'aide NCache API ou requêtes de type SQL. Ces fonctionnalités en font une option encore plus intéressante pour la mise en cache, car elles permettent un accès plus rapide aux données, une charge de base de données réduite et des performances d'application accrues. Profitez de ces fonctionnalités puissantes offertes par NCache et commencez votre essai gratuit dès aujourd'hui !