O Azure Cosmos DB é o novo NoSQL solução de banco de dados baseada em nuvem que ganhou muita popularidade nos últimos tempos. Todo mundo sabe que usar o cache com o Cosmos DB aumenta o desempenho do aplicativo e otimiza os custos de transação reduzindo as viagens ao banco de dados.
No entanto, armazenar em cache os dados do Cosmos DB em um cache distribuído pode levar à criação de duas cópias desses dados, uma no banco de dados e outra no cache. Se algum aplicativo que não tiver acesso ao seu cache alterar diretamente esses dados no Cosmos DB, seu cache não estará ciente disso. Isso faz com que seu cache tenha uma cópia mais antiga dos dados em comparação com o banco de dados.
Esses dados obsoletos são um grande problema em aplicativos multiambiente de alta transação, onde trabalhar com dados desatualizados deixa uma grande marca no desempenho. Neste blog, discutirei como você pode continuar usando o cache e ainda evitar esse problema de “dados obsoletos”.
Sincronização de cache com o Cosmos DB usando NCache
NCache é uma solução de cache distribuído muito poderosa com um conjunto abundante de recursos poderosos. Assim como qualquer cache distribuído, NCache fica entre o banco de dados e o próprio aplicativo e armazena em cache os dados do banco de dados a serem usados pelo aplicativo; assim, reduzindo exponencialmente o tempo de leitura/gravação. Ele também resolve o problema de dados obsoletos (discutido anteriormente) por um recurso conhecido como NotificarDependência Extensível.
Por meio de NotifyExtensibleDependency, você pode escrever sua própria lógica de dependência de dados personalizada na qual uma notificação de um banco de dados (Cosmos DB neste caso) é processada por NCache fazendo uso do Alterar feed mecanismo do Cosmos DB.
Qualquer modificação no Cosmos DB pode ser capturada usando a lógica do processador Cosmos DB Change Feed que está integrada ao código NotifyExtensibleDependency. É assim que o mecanismo de manipulação de eventos pode ser usado para impor a invalidação do cache em resposta a modificações no conteúdo do banco de dados, garantindo assim que os dados obsoletos não persistam no cache.
Você também tem a opção de usar o recurso de provedor ReadThru de NCache para melhorar ainda mais o desempenho do seu aplicativo Cosmos DB. Por meio desse recurso, você pode habilitar o cache para procurar diretamente no banco de dados itens que não existem no cache. O cache não apenas procura os itens solicitados no banco de dados (Cosmos DB), mas também armazena os itens solicitados dentro do cache após a descoberta bem-sucedida.
NCache Adicionar ao carrinho NotificarDependência Extensível Ler através do cache
Sincronizar o cache com o Cosmos DB: um exemplo rápido
Por exemplo, você está usando o Cosmos DB como um banco de dados para sua loja de comércio eletrônico e armazena em cache os dados usados com frequência em NCache. Sua loja contém dezenas de milhares de produtos e, em média, um milhão de transações ocorrem diariamente. NCache ajuda você a reduzir a carga em seu banco de dados Cosmos, mas há uma chance de que os dados no cache fiquem obsoletos. Como discutido acima, NCache resolve este problema por seu recurso NotifyExtensibleDependency que garante a funcionalidade ideal de sua loja de comércio eletrônico.
O exemplo de código a seguir demonstra o uso do recurso NotifyExtensibleDependency. Neste exemplo, um produto é carregado do banco de dados com base em seu ID. Em seguida, NotifyExtensibleDependency é criado e registrado no produto buscado. Por fim, o produto, na forma de Item de cache é inserido no cache com a chave especificada.
Além disso, o CosmosDbNotificationDependency é o nome do provedor que foi implantado em seu cache. Este provedor implementa o ICustomDependencyProvider interface.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Product product = LoadProductFromDatabase(productId); string providerName = "CosmosDbNotificationDependency"; //This is the name of your provider deployed on cache server string key = "Product#" + product.Id ; IDictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("Key", key); parameters.Add("CacheId", "myCache"); parameters.Add("EndPoint", ""); parameters.Add("AuthKey", ""); parameters.Add("DatabaseName", "demoDatabase"); parameters.Add("MonitoredCollection", "Customers"); parameters.Add("LeaseEndPoint", ""); parameters.Add("LeaseAuthKey", ""); parameters.Add("LeaseDatabaseName", "demoDatabase"); parameters.Add("LeaseCollection", "leases"); CacheItem item = new CacheItem(product); item.Dependency = new CustomDependency(providerName, parameters); _cache.Insert(key, item); |
Para mais detalhes relacionados à implementação, você pode conferir nosso GitHub repositório.
NCache Adicionar ao carrinho NotificarDependência Extensível Operações de cache em NCache
Provedor de leitura para cache
O recurso de leitura de NCache (como o nome sugere) permite que você leia o cache diretamente em seu banco de dados (Cosmos DB) quando os itens não forem encontrados no cache. Esse recurso basicamente evita o incômodo de procurar itens no banco de dados quando esses itens solicitados não são encontrados no cache. Por meio desse recurso, não só NCache lê seu banco de dados para os itens solicitados, mas também os insere no cache para recuperações rápidas no futuro.
O exemplo de código a seguir recupera um item com leitura habilitada, correspondente à chave especificada “Product:1001” usando o método Get<>.
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 data = 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 Cosmos 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 Cosmos DB manter dados atualizados para acesso e processamento mais fáceis.
NCache Adicionar ao carrinho Baixar NCache Opções de implantação na nuvem para NCache.