Cache distribuído está se tornando muito popular porque é uma maneira poderosa de aumentar o desempenho e a escalabilidade de seu aplicativo e lidar com cargas de transações extremas sem diminuir a velocidade. Os aplicativos .NET e Java estão usando-o cada vez mais a cada dia.
Mas, um desafio que as pessoas enfrentam com o cache distribuído é como mapear e armazenar dados relacionais em um armazenamento de emparelhamento de HashTable (chave, valor) que é um cache distribuído. A maioria dos caches hoje não fornece nenhum mecanismo para lidar com isso. Hoje, discutirei a dependência de dados que o ASP.NET Cache fornece e que NCache incorporados desde o primeiro dia.
Assim como ASP.NET Cache, em NCache, Dependência de dados permite especificar uma dependência no cache distribuído entre dois itens armazenados em cache. O item A em cache depende do item B em cache. E, se B for atualizado ou removido do cache distribuído, A será removido automaticamente. Isso garante que, se houver uma restrição de integridade referencial entre A e B no banco de dados, ela também seja respeitada no cache distribuído. Você também pode especificar a dependência de dados em cascata onde A depende de B e B depende de C. Então, se você atualizar ou remover C, A e B serão removidos. Aqui está um breve exemplo de dependência de dados:
NCache Adicionar ao carrinho Gerenciando Dados Relacionais Documentos sobre dependência de dados
A dependência de dados permite criar relacionamentos um para um, um para muitos e muitos para muitos no cache distribuído. Aqui está como você lidaria com diferentes cenários:
Relacionamento um a um
A tem um-para-um com B. Adicione B sem qualquer dependência de dados. Em seguida, adicione A e especifique uma dependência de dados para B. Se A e B tiverem uma dependência mútua, ao atualizar B posteriormente, especifique uma dependência em A.
Relacionamento um-para-muitos
A tem um para muitos com B. Adicione A primeiro sem qualquer dependência de dados. Em seguida, adicione um ou mais itens B e especifique uma Dependência de Dados para o A fornecido para todos eles. Desta forma, se A for atualizado ou removido, todos os B's serão removidos automaticamente por NCache.
Relacionamento muitos para muitos
A e B têm muitos-para-muitos entre si. Adicione um ou mais A's. Em seguida, adicione um ou mais B's e especifique Data Dependency para os A's apropriados. Em seguida, volte e atualize os A para especificar a dependência de dados nos Bs apropriados.
Aqui está um exemplo simples de criação de dependência um-para-um em cache.
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 |
public static void CreateDependencies(ICache _cache) { try { string keyB = "objectB-1000"; Object objB = new Object(); string keyA = "objectA-1000"; Object objA = new Object(); // Initializing cacheItems var itemOne = new CacheItem(objA); var itemTwo = new CacheItem(objB); // Adding objA dependent on ObjB itemOne.Dependency = new KeyDependency(keyB); //Adding items to cache _cache.Add(keyB, itemTwo); _cache.Add(keyA, itemOne); // Removing "objB" automatically removes “objA” as well _cache.Remove(keyB); _cache.Dispose(); } catch (Exception e) { throw; } } |
então, NCache permite que você aproveite a dependência de dados e especifique relacionamentos de dados no cache distribuído. Baixe um teste de 60 dias totalmente funcional do NCache Enterprise e experimente você mesmo.
NCache Adicionar ao carrinho Ncache Baixar Comparação de edições
Obrigado por compartilhar o blog, foi bem explicado sobre dependência de dados, valeu a pena investir tempo lendo este blog.
Oi Iqbal, Obrigado por compartilhar o artigo imairnftove. Você pode explicar o cache distribuído? Isso significa cache mantido em diferentes servidores front-end (físicos) e servidor de banco de dados? O FS1 está mantendo seu próprio cache local C1. O FS2 está mantendo seu próprio cache localC2. Existe um servidor de banco de dados que possui cache global GC. Todo o cache local C3, C3, C1 depende do GC. Se o GC for atualizado, todo o cache local será invalidado. Eu não sei como isso vai funcionar porque na minha opinião não podemos controlar a memória no outro sistema? Por favor, esclareça isso. Obrigado Khusi
NCache é um cache distribuído na memória fora do processo. Ele pode formar um cluster de nós de cache em tempo de execução e pode ser distribuído em vários aplicativos.
Aqui é como NCache irá lidar com o seu cenário:
Você pode criar um cache global em cluster (por exemplo, com 2 nós no cluster) nos servidores de banco de dados ou servidores de cache dedicados e pode então utilizar o recurso “Cache de cliente” em cada servidor front-end FS1, FS2 e FS3. NCache O cache do cliente é um cache local executado em NCache caixas de cliente (servidores Web/Aplicativos são NCache clientes) e mantém uma cópia dos dados localmente na caixa do cliente que é acessada com mais frequência do cache clusterizado.
As chamadas subsequentes para os mesmos dados serão atendidas diretamente do cache do cliente local, proporcionando mais desempenho, economizando viagens de rede, os caches do cliente também podem ser de natureza in-proc.
A sincronização de dados é gerenciada automaticamente por NCache. No caso de atualizações no cache clusterizado global, os caches do cliente invalidarão/removerão automaticamente os itens e trarão uma cópia atualizada do cache clusterizado no acesso subsequente.
Olá Iqbal,
Obrigado por compartilhar artigo informativo. Você pode explicar o cache distribuído? Isso significa cache mantido em diferentes servidores front-end (físicos) e servidor de banco de dados?
Eu tenho um cenário - Frontend Server (FS)1 está mantendo o cache local C1. O FS2 está mantendo seu próprio cache local C2. O FS3 está mantendo seu próprio cache localC3. Existe um servidor de banco de dados que possui cache global GC. Todo o cache local C1, C2, C3 depende do GC. Se o GC for atualizado, todo o cache local será invalidado. Eu não sei como isso vai funcionar porque na minha opinião não podemos controlar a memória do outro sistema?
Por favor, jogue alguma luz sobre isso.
obrigado
Khusi
É realmente uma informação interessante e útil. Estou feliz que você compartilhou esta informação útil conosco. Por favor, nos mantenha informados assim. Obrigado por compartilhar.