Azure Cosmos DB è il nuovo NoSQL soluzione di database basata su cloud che ha guadagnato molta popolarità negli ultimi tempi. Tutti sanno che l'utilizzo della memorizzazione nella cache con Cosmos DB migliora le prestazioni delle applicazioni e ottimizza i costi di transazione riducendo i viaggi al database.
Tuttavia, la memorizzazione nella cache dei dati di Cosmos DB in una cache distribuita può portare alla creazione di due copie di questi dati, una nel database e l'altra nella cache. Se un'applicazione che non ha accesso alla cache modifica direttamente questi dati in Cosmos DB, la cache non ne è a conoscenza. Ciò comporta che la tua cache abbia una copia più vecchia dei dati rispetto al database.
Questi dati obsoleti rappresentano un grave problema nelle applicazioni multi-ambiente ad alte transazioni in cui l'utilizzo di dati obsoleti lascia un grande segno sulle prestazioni. In questo blog, parlerò di come continuare a utilizzare la memorizzazione nella cache ed evitare comunque questo problema di "dati non aggiornati".
Sincronizzazione della cache con Cosmos DB utilizzando NCache
NCache è una soluzione di memorizzazione nella cache distribuita molto potente con un'abbondante serie di potenti funzionalità. Proprio come qualsiasi cache distribuita, NCache si trova tra il database e l'applicazione stessa e memorizza nella cache i dati del database che devono essere utilizzati dall'applicazione; quindi, riducendo esponenzialmente il tempo di lettura/scrittura. Risolve anche il problema dei dati obsoleti (discusso in precedenza) da una funzionalità nota come NotificaExtensibleDependency.
Tramite NotifyExtensibleDependency, puoi scrivere la tua logica di dipendenza dei dati personalizzata in cui una notifica da un database (Cosmos DB in questo caso) viene elaborata da NCache facendo uso di Cambia feed meccanismo di Cosmos DB.
Qualsiasi modifica nel Cosmos DB può essere acquisita usando la logica del processore Cosmos DB Change Feed integrata nel codice NotifyExtensibleDependency. Questo è il modo in cui il meccanismo di gestione degli eventi può essere utilizzato per imporre l'invalidazione della cache in risposta alle modifiche al contenuto del database, assicurando così che i dati non aggiornati non persistano nella cache.
Hai anche la possibilità di utilizzare la funzione del provider ReadThru di NCache per migliorare ulteriormente le prestazioni della tua applicazione Cosmos DB. Attraverso questa funzione, puoi consentire alla cache di cercare direttamente nel database gli elementi che non esistono nella cache. Non solo la cache cerca gli elementi richiesti nel database (Cosmos DB), ma memorizza anche gli elementi richiesti all'interno della cache in caso di rilevamento riuscito.
NCache Dettagli NotificaExtensibleDependency Leggi attraverso la memorizzazione nella cache
Sincronizzare la cache con Cosmos DB: un rapido esempio
Ad esempio, stai usando Cosmos DB come database per il tuo negozio di e-commerce e memorizza nella cache i dati utilizzati di frequente NCache. Il tuo negozio contiene decine di migliaia di prodotti e in media un milione di transazioni avvengono ogni giorno. NCache ti aiuta a ridurre il carico sul tuo database Cosmos, ma c'è la possibilità che i dati nella cache diventino obsoleti. Come discusso sopra, NCache risolve questo problema con la sua funzione NotifyExtensibleDependency che garantisce la funzionalità ottimale del tuo negozio di e-commerce.
Nell'esempio di codice seguente viene illustrato l'utilizzo della funzionalità NotifyExtensibleDependency. In questo esempio, un prodotto viene caricato dal database in base al suo ID. Quindi NotifyExtensibleDependency viene creato e registrato per il prodotto recuperato. Infine, il prodotto, sotto forma di CacheItem viene inserito nella cache con la chiave specificata.
Inoltre, CosmosDbNotificationDependency è il nome del provider che è stato distribuito nella cache. Questo provider implementa il ICustomDependencyProvider interfaccia.
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); |
Per ulteriori dettagli relativi all'implementazione, puoi consultare il ns GitHub repository.
NCache Dettagli NotificaExtensibleDependency Operazioni nella cache in NCache
Provider di lettura per la cache
La funzione Read Through di NCache (come suggerisce il nome) ti consente di leggere la cache direttamente nel tuo database (Cosmos DB) quando gli elementi non vengono trovati nella cache. Questa funzione in pratica ti evita il fastidio di cercare gli elementi nel database quando gli elementi richiesti non vengono trovati nella cache. Attraverso questa funzione, non solo NCache legge il tuo database per gli elementi richiesti, ma li inserisce anche nella cache per te per recuperi rapidi in futuro.
L'esempio di codice seguente recupera un elemento con read-through abilitato, corrispondente alla chiave specificata "Product:1001" usando il metodo 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 Dettagli Leggi attraverso la memorizzazione nella cache Operazioni nella cache in NCache
Conclusione
Per riassumere, NCache offre una soluzione flessibile per sincronizzare i dati tra Cosmos DB e la cache, evitando così l'incoerenza dei dati. NCache, una soluzione di memorizzazione nella cache distribuita in memoria, può essere un mezzo ideale per Cosmos DB per mantenere i dati aggiornati per un accesso e un'elaborazione più semplici.
NCache Dettagli Scaricare NCache Opzioni di distribuzione cloud per NCache.