La gestión eficiente de datos requiere la capacidad de buscar rápidamente datos de aplicaciones en función de atributos específicos. A medida que crece el volumen de datos, esta necesidad se vuelve aún más crucial. Por lo general, las bases de datos ya tienen campos que facilitan la categorización de datos, y estos campos se pueden usar como índices al almacenar datos en caché. Sin embargo, puede haber instancias en las que desee agrupar datos en función de atributos que no están presentes en la memoria caché, como etiquetas u otros atributos personalizados.
Con NCache, no solo puede categorizar los datos de la aplicación en función de los atributos personalizados, sino que también puede realizar búsquedas en función de estos atributos. Además de la indexación tradicional, NCache ofrece la opción de categorizar los datos usando Grupos, Etiquetasy Etiquetas con nombre, lo que permite una mayor flexibilidad en la categorización y recuperación de datos.
Categorización de datos de caché a través de grupos
Para una colección de elementos que se han almacenado en caché y se pueden identificar mediante un nombre de grupo, puede crear un grupo. Este nombre puede ayudar a recuperar cualquier elemento que pertenezca a un grupo. Por ejemplo, puede crear un Grupo con todos los productos asociados con un determinado cliente o una determinada categoría de productos. Simplemente decir el nombre causará NCache para devolver todos los elementos almacenados en caché asociados con él. Tenga en cuenta que solo puede haber un único elemento asociado con un solo grupo. El ejemplo que se muestra a continuación muestra cómo los clientes de una región diferente (Costa Este en este caso) se agrupan en una tienda en línea.
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); } |
Puede usar consultas SQL para buscar objetos de caché contenidos en Grupos usando la palabra clave $Group$. El ejemplo de código que sigue muestra cómo usar una consulta SQL para ver todos los clientes de una región en particular, en este caso, la costa oeste.
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"); } |
Además de aumentar la eficiencia, los Grupos facilitan que los usuarios recuperar or borrar datos basados en estas categorías lógicas que aumentan la escalabilidad de su aplicación. Además, los grupos pueden almacenar en caché datos de uso común que coincidan con ciertos criterios de búsqueda, lo que evita el costo de realizar búsquedas repetidas en la base de datos.
Categorización de datos de caché a través de etiquetas
Etiquetas in NCache proporcionar una forma de categorizar los elementos almacenados en caché utilizando varias etiquetas. Un objeto almacenado en caché puede tener una o más etiquetas asignadas, que se pueden usar para recuperar el elemento. Por ejemplo, puede categorizar artículos según su región, idioma o características del producto. Llamar el nombre de una etiqueta causará NCache para devolver todos los elementos que tienen esa etiqueta y se almacenan en caché. Las etiquetas le permiten vincular metadatos a sus objetos almacenados en caché, lo que facilita la búsqueda y la manipulación de datos. El siguiente ejemplo muestra cómo se agregará a la memoria caché un cliente que inició sesión desde la región de la costa este.
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 |
Del mismo modo, puede consultar un elemento que tenga una palabra clave de etiqueta específica $Tag$. La consulta SQL del siguiente ejemplo devuelve todos los elementos vinculados a la etiqueta. Clientes 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"); } |
El uso de etiquetas le da al usuario un alto nivel de relevancia con cada tipo específico. Para conocer las otras operaciones CRUD que ofrece Tags, consulte el NCache documentación.
Categorización de datos de caché a través de etiquetas con nombre
Un objeto almacenado en caché puede recibir varias etiquetas con nombre, a través de una lista, que luego se puede usar para recuperar el elemento. Cada etiqueta con nombre tiene dos parámetros: una clave que es una cadena que representa el nombre de la etiqueta y un valor que es cualquier tipo primitivo. Por ejemplo, puede asignar etiquetas con nombre a artículos en función de su rango de precios o disponibilidad. Llamar al nombre y valor de la etiqueta causará NCache para devolver todos los elementos almacenados que tienen la etiqueta con nombre especificada cuando necesite obtener todos los elementos con esa etiqueta.
Al igual que con los grupos y las etiquetas, puede recuperar elementos desde la memoria caché con etiquetas con nombre mediante consultas de objetos. Cuando ciertas etiquetas con nombre ya están agregadas a elementos en el caché, NCache ofrece al usuario la oportunidad de actualizar esas etiquetas con nombre. Usando NCacheclase personalizada, es decir, CacheItem, puede agregar datos al caché. como propiedad de la Etiquetas con nombre class, CacheItem también le permite especificar especificaciones adicionales relacionadas con un elemento. En el ejemplo que se muestra a continuación, un cliente con membresía VIP (a los miembros VIP se les ofrece un 10 % de descuento), las etiquetas con nombre se establecen asignándolas como una propiedad 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); |
Cuando un artículo es añadido a la memoria caché con las etiquetas con nombre, puede recuperarlo fácilmente a través de la consulta SQL. En el siguiente ejemplo, el usuario desea ver todos los clientes que tienen un descuento de membresía VIP del 12 %.
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"); } |
Conclusión
Claramente NCache ofrece una variedad de capacidades sólidas para el almacenamiento en caché y la búsqueda de datos efectivos a través de grupos, etiquetas y etiquetas con nombre para categorizar los datos almacenados en caché según atributos específicos y recuperarlos usando NCache API o consultas similares a SQL. Estas características los convierten en una opción aún más convincente para el almacenamiento en caché, ya que permiten un acceso más rápido a los datos, una menor carga de la base de datos y un mayor rendimiento de las aplicaciones. Aproveche estas potentes funciones que ofrece NCache ¡y comience su prueba gratuita hoy!