O gerenciamento eficiente de dados requer a capacidade de pesquisar rapidamente dados de aplicativos com base em atributos específicos. À medida que o volume de dados cresce, essa necessidade se torna ainda mais crucial. Normalmente, os bancos de dados já possuem campos que facilitam na categorização dos dados, e esses campos podem ser usados como índices ao armazenar dados em cache. No entanto, pode haver instâncias em que você deseja agrupar dados com base em atributos que não estão presentes no cache, como tags ou outros atributos personalizados.
Com o NCache, você pode não apenas categorizar os dados do aplicativo com base em atributos customizados, mas também pode realizar pesquisas com base nesses atributos. Além da indexação tradicional, NCache oferece a opção de categorizar dados usando Grupos, Tags e Tags nomeadas, permitindo maior flexibilidade na categorização e recuperação de dados.
Cache de Categorização de Dados por Grupos
Para uma coleção de itens que foram armazenados em cache e podem ser identificados por um nome de grupo, você pode criar um grupo. Este nome pode ajudar a recuperar qualquer item pertencente a um Grupo. Por exemplo, pode criar um Grupo com todos os produtos associados a um determinado cliente ou a uma determinada categoria de produtos. Simplesmente chamar o nome causará NCache para retornar todos os itens em cache associados a ele. Observe que só pode haver um único item associado a um único Grupo. O exemplo abaixo mostra como os clientes de uma região diferente, (neste caso, Costa Leste) são agrupados em uma loja online.
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); } |
Você pode usar consultas SQL para pesquisar objetos de cache contidos em Grupos usando a palavra-chave $Group$. O exemplo de código a seguir demonstra como usar uma consulta SQL para visualizar todos os clientes de uma determinada região — neste caso, a 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"); } |
Além de aumentar a eficiência, os Grupos tornam simples para os usuários recuperar or excluir dados baseados nessas categorias lógicas que aumentam a escalabilidade do seu aplicativo. Além disso, o Grupos pode armazenar em cache dados comumente usados que correspondem a determinados critérios de pesquisa, evitando o custo de executar pesquisas de banco de dados repetidamente.
Cache de Categorização de Dados via Tags
Tags in NCache fornecem uma maneira de categorizar itens em cache usando várias tags. Um objeto em cache pode ter um ou mais Tags atribuídos a ele, que podem ser usados para recuperar o item. Por exemplo, você pode categorizar itens de acordo com sua região, idioma ou características do produto. Chamar o nome de uma tag causará NCache para retornar todos os itens que possuem essa tag e são armazenados em cache. As tags permitem vincular metadados aos objetos em cache, facilitando a pesquisa e a manipulação de dados. O exemplo a seguir mostra como um cliente que efetuou login na região da Costa Leste será adicionado ao 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 |
Da mesma forma, você pode consultar um item com uma palavra-chave de tag específica $Tag$. A consulta SQL no exemplo abaixo retorna todos os itens vinculados à tag 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"); } |
O uso de tags dá ao usuário um alto nível de relevância com cada tipo específico. Para conhecer as demais operações CRUD oferecidas pelos Tags, consulte o NCache documentação.
Categorização de dados de cache por meio de tags nomeadas
Um objeto em cache pode receber várias tags nomeadas, por meio de uma lista, que pode ser usada para recuperar o item. Cada tag nomeada possui dois parâmetros: uma chave que é uma string que representa o nome da tag e um valor que é qualquer tipo primitivo. Por exemplo, você pode atribuir tags nomeadas a itens com base em sua faixa de preço ou disponibilidade. Chamar o nome e o valor da tag causará NCache para retornar todos os itens armazenados que possuem a tag nomeada especificada quando você precisar obter todos os itens com essa tag.
Semelhante a grupos e tags, você pode recuperar itens do cache com tags nomeadas usando consultas de objeto. Quando certas tags nomeadas já foram adicionadas a itens no cache, NCache oferece ao usuário a oportunidade de atualizar essas tags nomeadas. Usando NCacheda classe personalizada, ou seja, CacheItem, você pode adicionar dados ao cache. Como propriedade do Named Tags classe, CacheItem adicionalmente permite que você especifique especificações adicionais relacionadas a um item. No exemplo fornecido abaixo, um cliente com associação VIP (os membros VIP recebem 10% de desconto), as Tags nomeadas são definidas atribuindo-as como uma propriedade 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); |
Quando um item é adicionado ao cache com as tags nomeadas, você pode recuperá-lo facilmente por meio da consulta SQL. No exemplo a seguir, o usuário deseja ver todos os clientes com 12% de desconto na assinatura 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"); } |
Conclusão
Claramente NCache oferece uma variedade de recursos robustos para armazenamento eficaz de dados em cache e pesquisa por meio de grupos, tags e tags nomeadas para categorizar dados armazenados em cache com base em atributos específicos e recuperá-los usando NCache APIs ou consultas do tipo SQL. Esses recursos os tornam uma opção ainda mais atraente para armazenamento em cache, pois permitem acesso mais rápido aos dados, diminuição da carga do banco de dados e aumento do desempenho do aplicativo. Aproveite esses recursos poderosos oferecidos pelo NCache e comece seu teste gratuito hoje!