Mongo DB é um NoSQL, escalável, de código aberto, de alto desempenho e orientado a documentos. é um dos melhores NoSQL databases no mercado. O uso do cache com o Mongo DB oferece aos aplicativos um aumento significativo no desempenho, reduzindo as viagens ao banco de dados. No entanto, armazenar em cache os dados do Mongo DB dentro de um cache distribuído cria duas cópias desses dados. Uma cópia reside no Mongo DB e uma cópia reside no cache distribuído. Se um aplicativo alterar os dados diretamente dentro do Mongo DB, os dados dentro do cache se tornarão obsoletos.
Para aplicativos de alta transação, multiambiente e de nível empresarial, esses dados obsoletos são um grande problema. Neste blog, discutirei como você pode continuar usando um cache distribuído junto com o Mongo DB e evitar o problema de dados obsoletos ao mesmo tempo.
Sincronize o cache com o Mongo DB usando NCache
NCache é um cache distribuído bem conhecido para .NET Framework/ .NET Core, Java e Node.js. NCache fornece um vasto conjunto de recursos que podem melhorar o desempenho de seu aplicativo aos trancos e barrancos. Entre esses vastos conjuntos de recursos está um recurso conhecido como Dependência extensível baseada em notificação. Esse recurso aborda o problema de dados obsoletos com o MongoDB (que discutimos anteriormente).
A NotifyExtensibleDependency
A classe permite que você escreva sua lógica de dependência personalizada na qual você é notificado sobre as alterações que ocorrem no banco de dados por meio de notificações. NCache processa essas notificações fazendo uso de um recurso do Mongo DB (introduzido na versão 3.6) conhecido como Alterar fluxo. Depois que essas notificações são processadas, os dados obsoletos no cache são invalidados com base no código que você escreveu.
A lógica do Change Stream está integrada dentro do NotifyExtensibleDependency
. Você pode modificar este Change Stream para receber notificações sobre operações de adição, atualização ou exclusão que ocorrem dentro do banco de dados. Mas as operações de exclusão não podem ser rastreadas. Assim, para rastrear operações de exclusão, é utilizada uma operação de atualização com expiração.
Também deve ser lembrado que o Mongo DB não oferece suporte ao Change Stream para bancos de dados autônomos. Você precisa garantir que seu banco de dados Mongo DB tenha um conjunto de réplicas para que o recurso Change Stream funcione.
NCache Adicionar ao carrinho NCache NotificarDependência Extensível NCache Docs
Cache de sincronização com o Mongo DB: um exemplo rápido
Para usar o Mongo DB com NCache você precisa configurar Dependência personalizada in NCache primeiro e, em seguida, implemente-o em seu aplicativo cliente. Isso é explicado abaixo:
NCache Configuração de dependência personalizada
Para usar o recurso Dependência Extensível Baseada em Notificação do NCache com o Mongo DB, você precisa configurar dependência personalizada on NCache primeiro e implante seus respectivos arquivos DLL no NCache Servidor.
No GIF abaixo, implantei um provedor chamado MongoDbNotifyExtensibleDependencyProvider
juntamente com todas as suas dependências no cache. Ele implementa o ICustomDependencyProvider
interface. Ele é responsável por criar um objeto de dependência para o Item de cache. Para que a dependência seja acionada corretamente, o NotifyExtensibleDependency
classe deve ser implementada. Essa classe ouvirá o fluxo de mudança do MongoDB e acionará dependências após a alteração de dados no Mongo DB.
Além disso, neste exemplo, estou usando uma implementação de código aberto do ICustomDependencyProvider
e NotifyExtensibleDependency
disponível em GitHub.
NCache Adicionar ao carrinho Configuração de dependência personalizada Repositório do GitHub
Implantação no aplicativo cliente
Por exemplo, você deseja usar o Mongo DB como um banco de dados para sua loja de comércio eletrônico e deseja armazenar em cache os dados usados com frequência dentro NCache. Sua loja conterá dados de mais de um milhão de produtos e milhões de transações ocorrerão diariamente. NCache ajudará a reduzir a carga em seu banco de dados Mongo DB, mas os dados dentro do cache tendem a ficar obsoletos.
Ter dados obsoletos dentro do cache pode causar problemas para você e seus clientes. Felizmente, o recurso de dependência extensível baseada em notificação do NCache atenua o problema de dados obsoletos garantindo a funcionalidade ideal de sua loja de comércio eletrônico.
No exemplo a seguir, um produto é carregado do banco de dados com base em seu ID. Então NotifyExtensibleDependency
é criado e registrado em relação ao produto buscado. Por fim, o produto, na forma de Item de cache é inserido no cache com a chave especificada.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Product product = LoadProductFromDatabase(productId); //This is the name of your provider deployed on a cache server string providerName = "MongoDbNotifyExtensibleDependencyProvider"; string key = "Product:" + product.Id ; IDictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("ConString", "mongodb://**.**.**.**:27017"); parameters.Add("DatabaseName", "productscollection"); parameters.Add("CollectionName", "products"); CacheItem item = new CacheItem(product); item.Dependency = new CustomDependency(providerName, parameters); _cache.Insert(key, item); |
NCache Adicionar ao carrinho NotificarDependência Extensível Operações de cache em NCache
Usando o provedor de leitura
Outra característica marcante da NCache é o Provedor de leitura. Esse recurso permite que você procure dados dentro do Mongo DB diretamente quando não forem encontrados no cache. Quando o item é encontrado dentro do banco de dados, ele também é armazenado dentro do cache automaticamente; assim, economizando seu precioso tempo. Você pode usar esse recurso em seus aplicativos Mongo DB para aprimorar ainda mais seu desempenho.
O exemplo de código a seguir recupera um item com leitura ativa, correspondente à chave especificada “Product:1001” usando o Get<>
método.
1 2 3 4 5 6 7 8 9 |
// Specify the key of the item string key = "Product:1001"; // Specify the readThruOptions for read through operations var readThruOptions = new ReadThruOptions(); readThruOptions.Mode = ReadMode.ReadThru; // Retrieve the data of the corresponding item with reads thru enabled Product product = cache.Get(key, readThruOptions); |
NCache Adicionar ao carrinho Ler através do cache Operações de cache em NCache
Conclusão
Resumindo, NCache oferece uma solução flexível para sincronizar dados entre o Mongo DB e o cache, evitando assim a inconsistência de dados. NCache, uma solução de cache distribuído na memória, pode ser um meio ideal para o Mongo DB manter dados atualizados para acesso e processamento rápidos.
NCache Adicionar ao carrinho Baixar NCache Comparação de edições