Um amigo meu disse que a gerência de sua superloja está pensando em comprar um sistema de cache distribuído para melhorar o desempenho de seu aplicativo de comércio eletrônico. Mas ele não tinha certeza se esse cache distribuído forneceria a capacidade de pesquisar dados com SQL. A razão é que a maior parte da funcionalidade de sua loja online depende da pesquisa de dados e eles não podem se dar ao luxo de reescrever seu aplicativo. E, se todas as consultas SQL continuarem indo para o banco de dados, isso anula o propósito de usar um cache distribuído.
Se você está enfrentando uma situação semelhante e precisa de uma solução rápida e confiável para todos os seus problemas de desempenho, então NCache é exatamente o que você precisa. Continue a ler para saber mais.
NCache Adicionar ao carrinho Baixar NCache Comparação de edições
Cache como um armazenamento de dados
Agora, se estivermos armazenando dados em um cache para disponibilizá-los para uso mais rápido, o problema que meu amigo explicou ainda permanece; o cliente deseja consultar o estoque para buscar os produtos desejados. Bem, tenho boas notícias para você (e para ele); NCache está completamente equipado com SQL que lhe permite consultar dados em seu cache da mesma forma que você faria em seu banco de dados.
Figura 1: NCache manipulação de carga de consulta SQL
Espere, aguarde! Isso não resolve de repente todos os nossos problemas? Conforme mostrado na Figura 1 Todo o catálogo de produtos é armazenado no cache, podemos implementar consultas SQL nele e retornar o resultado diretamente para o aplicativo – isso reduz significativamente o total de viagens ao datatable e uma vez que NCache é escalável e confiável, pode lidar com centenas de milhares de clientes de uma só vez!
Consulta SQL em NCache – Exemplo rápido
Suponha que um cliente tenha o ID do produto de um produto que ele é um consumidor frequente, observe a consulta abaixo, esta será executada no cache (não no banco de dados) e enviará o resultado para o aplicativo.
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 } } |
O problema é que essas consultas SQL no cache são muito úteis, no entanto, elas estão trabalhando dentro de um cache, afinal; então…
Que tipo de dados é pesquisado no cache?
NCache tem duas vastas categorias nas quais os dados são armazenados. Estes são dados transacionais e dados de referência.
Dados transacionais
Dados transacionais são dados tratados como uma unidade singular com a finalidade de satisfazer uma solicitação. Eles são coletados do banco de dados como resultados da consulta e armazenados em um cache. Por exemplo, dada a tabela do banco de dados, o cliente pede todos os produtos mais baratos que $ 5, a saída resultante armazenada no cache são dados transacionais.
Figura 2: Tabela de produtos no banco de dados
1 |
SELECT * FROM Products WHERE UnitPrice <= 5.00 |
Figura 3: Resultado da consulta armazenado no cache
Os dados transacionais geralmente são armazenados temporariamente para processamento. É atualizado com frequência e os dados antigos e desnecessários são descartados. O SQL não é necessário para um único objeto e, em vez disso, as pesquisas de chave são usadas para dados do objeto. Os dados transacionais já são dados do resultado da consulta; portanto, as consultas SQL não podem ser executadas nele.
Data de referência
NCache permite armazenar grandes quantidades de dados no cache por períodos de tempo mais longos. Este tipo de dados é conhecido como dados de referência. Os dados de referência são armazenados de forma estruturada e relacional, são mantidos regularmente atualizados e sincronizados com o banco de dados. Devido a esses motivos, é possível implementar consultas SQL nesses dados no cache distribuído.
Com a implementação de NCache, a maioria das consultas que o cliente faz são executadas no cache e os resultados são retornados imediatamente. Isso reduz tremendamente o número de viagens feitas ao cache, eliminando viagens excessivas ao banco de dados, o que remove todos os gargalos de desempenho.
NCache Adicionar ao carrinho Sintaxe SQL em NCache NCache Documentos SQL
Funcionalidades SQL em NCache
NCache fornece uma ampla gama de funções SQL e operadores que permitem pesquisar e excluir dados no cache. Observe que a extensão SQL fornecida por NCache não suporta comandos Inserir e Atualizar. Esses comandos são implementados diretamente no banco de dados.
Vamos dar uma olhada em alguns dos recursos exclusivos do SQL na memória fornecidos pelo NCache.
Usando caracteres curinga SQL em NCache
NCache fornece pesquisa flexível com dois curingas distintos na função SQL COMO. Esses são '?' e '*'
“?” é usado onde há um caractere à frente que precisa ser pesquisado. Por exemplo, "shar?". Isso pesquisará o cache e poderá fornecer compartilhamento, nitidez ou qualquer outro resultado semelhante.
“*” é usado onde pode haver zero a qualquer número de caracteres à frente que são pesquisados. Por exemplo, “cha*” pode dar char, personagem, cadeira ou qualquer outro resultado similar.
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 } } |
Usando funções de agregação SQL em NCache
Funções agregadas são usados em SQL para realizar operações aritméticas em vários valores e retornar um valor singular. NCache usa essas funções agregadas para executar operações em itens de dados armazenados em cache.
Algumas das funções agregadas suportadas por NCache são:
SOMA, CONTAGEM, MÉDIA, 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); } } |
Usando SQL GROUP BY em NCache
NCache permite agrupar dados de acordo com os critérios fornecidos usando o GROUP BY função. Mas há um problema, você só pode usar group-by em consultas que contenham qualquer uma das funções agregadas acima. Por exemplo
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); } } |
Razões NCache é uma boa escolha para aplicativos .NET
Vamos voltar ao nosso problema de superloja. Com a implementação de NCache para armazenar o catálogo de produtos e implementar consultas SQL nele, agora há uma redução significativa no número de viagens caras que o aplicativo precisa fazer ao banco de dados para fazer consultas e recuperar dados.
Aqui estão alguns dos outros benefícios de NCache que vem junto com isso:
- Sem código adicional: Como a maioria das consultas é feita em cache, nenhum código adicional precisa ser escrito para acessar o banco de dados a cada vez.
- 100% nativo .NET e .NET core: NCache é um .NET 100% nativo e .NET core cache distribuído que permite armazenar, gerenciar e consultar seus dados de forma confiável, diferente de qualquer outro cache distribuído e armazenamento de dados.
- Custos de largura de banda mais baixos: As consultas são realizadas nos dados armazenados em cache e retornadas ao aplicativo, economizando muito tempo e custos de largura de banda.
- Extremamente rápido e confiável: NCache é um cache distribuído extremamente rápido e escalável especialmente projetado para seu .NET e .NET core formulários. Confira o NCache referência de dois milhões de transações por segundo.
Então, como você pode ver, é uma situação ganha-ganha total!
Cabeça sobre a NCache Docs para saber mais sobre como você pode usar o SQL em seu armazenamento de dados de cache distribuído.
NCache Adicionar ao carrinho Baixar NCache Comparação de edições