Atualmente, muitas empresas exigem poder de processamento para lidar com grandes números de dados transacionais e de referência durante os horários de pico. Por exemplo, bancos que processam transações de clientes durante feriados. No entanto, um grande desafio é processar esses dados sem prejudicar o desempenho do seu aplicativo. Geralmente, as camadas de aplicativos são escalonáveis linearmente, mas os bancos de dados não. Altas cargas transacionais podem resultar em um gargalo de banco de dados e sobrecarregar seu sistema. Esse gargalo pode ser resolvido com a introdução de um cache distribuído na memória para o aplicativo .NET para acesso mais rápido aos dados.
Um cache distribuído na memória abrange vários servidores, mas funciona como uma única instância de cache e é transparente para os aplicativos que o utilizam. Ele reduz a carga de servidores e bancos de dados de back-end, pois quaisquer dados ativos ou transitórios são servidos a partir do cache.
NCache Adicionar ao carrinho Clustering dinâmico Cache distribuído
NCache é um de código aberto, cache distribuído na memória para aplicativos baseados em .NET e Java. NCache ajuda a alcançar velocidades transacionais rápidas e consistência de dados à medida que novos servidores são adicionados a esse cluster de cache para atender às suas crescentes necessidades de desempenho.
A figura a seguir ilustra essa arquitetura:
Os dados em cache são distribuídos igualmente entre todos os servidores e até mesmo replicados para evitar perda de dados e garantir alta disponibilidade. Portanto, o cache distribuído lida com centenas de milhares de solicitações por segundo, evitando o tempo de inatividade durante os picos de carga.
Essa estrutura distribuída garante nenhum ponto único de falha, pois mesmo que um servidor de cache esteja inativo, ele recebe dados dos outros nós do servidor. Portanto, sua empresa não é afetada e pode adicionar facilmente mais servidores ao cache distribuído, se necessário.
Os dados ideais para armazenamento em cache incluem leitura intensiva com frequência, mas ocasionalmente alteradas para obter o desempenho máximo de caches distribuídos. Os caches distribuídos armazenam os dados como valor chave pares, tornando-o simples de usar e acessar.
NCache Adicionar ao carrinho Clustering dinâmico Topologias de cache
utilização NCache como um cache distribuído
Juntamente com um aumento dramático no desempenho de seus aplicativos .NET, caches distribuídos, como NCache fornecer vários características avançadas que tornam o uso do cache ainda mais flexível para atender a diferentes casos de uso e necessidades de negócios – incluindo os abaixo.
NCache Operações CRUD
Você pode incorporar facilmente um cache distribuído em seu aplicativo .NET conectando ao cache e criando uma chave em relação ao item de cache obtido do banco de dados. Você pode inserir o item no cache com uma expiração de 30 minutos e buscá-lo usando essa conexão.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Specify the cache name to connect with it ICache cache = CacheManager.GetCache("demoCache"); // Get product from database var product = FetchProductFromDB(1001); // Generate a key for the cache item string key = "Product:1001"; // Create cache item and add 30sec sliding expiration var cacheItem = new CacheItem(product); cacheItem.Expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(30)); // Now add this item in cache for future use cache.Insert(key, cacheItem); // Fetch item from cache product = cache.Get(key); |
NCache Adicionar ao carrinho Expiração deslizante NCache
Sincronizar Cdoer com banco de dados
Pode haver um caso em que os dados armazenados em cache no banco de dados sejam alterados. Essa situação gera um problema de integridade, tornando seus dados em cache obsoletos enquanto seu aplicativo não está ciente disso. Para resolver este problema, NCache pode sincronizar automaticamente seu cache com o banco de dados. Consequentemente, sempre que ocorrer alguma alteração no banco de dados para um registro armazenado em cache, ele será removido automaticamente do cache para garantir a atualização dos dados.
Para ajudar ainda mais com esse mecanismo, NCache suporta Gravação, Carregador e Atualizador e Armazenamento de persistência que mantém os dados no cache sincronizados com o banco de dados.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Get orders against customerID from DB var order = FetchOrderByCustomerID("ALFKI"); // Generate unique cache key for the order string key = $"Order:{order.OrderID}"; CacheItem item = new CacheItem(order); // Create SQL query to select the data from database string query = "SELECT CustomerID, Address, City FROM dbo.Customers WHERE CustomerID = 'ALFKI';"; //Specify database connection string and the query to create and set SQLCacheDependency. item.Dependency = new SqlCacheDependency(dbConnString, query); // Insert the item into the cache cache.Insert(key, item); |
NCache Adicionar ao carrinho Sincronização de banco de dados Dependência de dados de cache
Consultas SQL
NCache suporta um SQL mecanismo de consulta para permitir que você pesquise seu cache de acordo com um determinado critério e retorne o conjunto de resultados necessário. NCache usa uma linguagem de consulta muito próxima da linguagem estruturada SQL nativa, o que facilita a consulta de dados em cache indexados. Ele fornece APIs compatíveis com ADO.NET como ExecuteReader, Executar Escalar e Executar sem consulta para pesquisar (SELECT) e remover (DELETE) dados do cache.
NCache Adicionar ao carrinho Suporte a SQL e LINQ em NCache Consulta SQL
ExecuteReader é usado para pesquisar dados e retornar pares de valores-chave. Ao usar o método ExecuteReader, você pode especificar se deseja que apenas as chaves sejam retornadas ou as chaves e seus dados (como um todo ou em partes).
1 2 3 4 5 6 7 8 9 10 11 |
//string query = "SELECT * FROM FQN.Product WHERE UnitsInStock > ?"; var queryCommand = new QueryCommand(query); queryCommand.Parameters.Add("UnitsInStock",0); ICacheReader reader = cache.ExecuteReader(queryCommand); while (reader.Read()) { string ID = reader.GetValue("ProductID"); string Name = reader.GetValue("ProductName"); } |
Consultas LINQ
LINQ é uma linguagem de consulta .NET genérica que permite pesquisar e filtrar dados de sua fonte de dados. A sintaxe LINQ é bastante semelhante ao SQL, mas em funcionalidades, fornece métodos de consulta melhores e mais otimizados ao consultar seu NCache servidores. Ele fornece a capacidade de permitir expressões de consulta mais eficientes enquanto atende à verificação de sintaxe durante a compilação do código.
NCache integra perfeitamente o LINQ para consultar informações no cache por meio de um provedor LINQ. O provedor de link facilita a execução de consultas LINQ no cache distribuído enquanto melhora o desempenho do aplicativo sem alterar o modelo de objeto LINQ.
As expressões de consulta consultam e transformam dados de seus servidores de cache distribuídos habilitados para LINQ.
1 2 3 4 |
IQueryable products = new NCacheQuery(cache); IQueryable product = from prod in products where prod.UnitsInStock > 10 select prod; |
NCache Adicionar ao carrinho LINQ para cache distribuído IConsultável
Pensamentos Finais
Além de fornecer desempenho e escalabilidade, NCache fornece outros recursos úteis também. E, no entanto, oculta sua complexidade relacionada à implementação e oferece uma maneira direta de usá-la. Se você estiver procurando por um cache distribuído baseado em .NET, sem comprometer o desempenho e a escalabilidade, não procure mais, NCache. É uma plataforma .NET pura com todos os sinos e assobios do cache distribuído moderno
NCache Adicionar ao carrinho Baixar NCache Comparação de edições