Mongo DB è un NoSQL, database scalabile, open source, ad alte prestazioni e orientato ai documenti. È uno dei migliori NoSQL databases nel mercato. L'uso della memorizzazione nella cache con Mongo DB offre alle applicazioni un notevole aumento delle prestazioni riducendo i viaggi al database. Tuttavia, la memorizzazione nella cache dei dati Mongo DB all'interno di una cache distribuita crea due copie di questi dati. Una copia risiede all'interno di Mongo DB e una copia risiede nella cache distribuita. Se un'applicazione modifica direttamente i dati all'interno di Mongo DB, i dati all'interno della cache diventano obsoleti.
Per le applicazioni con transazioni elevate, multiambiente e di livello aziendale, questi dati obsoleti rappresentano un grosso problema. In questo blog, parlerò di come continuare a utilizzare una cache distribuita insieme a Mongo DB ed evitare allo stesso tempo il problema dei dati obsoleti.
Sincronizza la cache con Mongo DB utilizzando NCache
NCache è una nota cache distribuita per .NET Framework/ .NET Core, Java e Node.js. NCache fornisce una vasta gamma di funzionalità che possono migliorare le prestazioni della tua applicazione a passi da gigante. Tra questi vasti insiemi di funzionalità c'è una caratteristica nota come Dipendenza estensibile basata sulla notifica. Questa funzione risolve il problema dei dati obsoleti con MongoDB (di cui abbiamo discusso in precedenza).
I NotifyExtensibleDependency
class ti consente di scrivere la tua logica di dipendenza personalizzata in cui vieni informato delle modifiche in corso all'interno del database tramite notifiche. NCache elabora queste notifiche utilizzando una funzionalità di Mongo DB (introdotta nella versione 3.6) nota come Cambia flusso. Una volta elaborate queste notifiche, i dati non aggiornati all'interno della cache vengono invalidati in base al codice che hai scritto.
La logica Change Stream è integrata all'interno del NotifyExtensibleDependency
. È possibile modificare questo flusso di modifiche per ricevere notifiche sulle operazioni di aggiunta, aggiornamento o eliminazione che avvengono all'interno del database. Tuttavia, le operazioni di eliminazione non possono essere tracciate. Quindi, per tenere traccia delle operazioni di eliminazione, viene utilizzata un'operazione di aggiornamento con scadenza.
Va inoltre tenuto presente che Mongo DB non supporta Change Stream per database autonomi. Devi assicurarti che il tuo database Mongo DB disponga di un set di repliche in modo che la funzione Cambia flusso funzioni.
NCache Dettagli NCache NotificaExtensibleDependency NCache Docs
Sincronizzare la cache con Mongo DB: un rapido esempio
Per utilizzare Mongo DB con NCache devi configurare Dipendenza personalizzata in NCache prima e poi distribuiscilo nell'applicazione client in seguito. Questo è spiegato di seguito:
NCache Configurazione delle dipendenze personalizzate
Per utilizzare la funzione Dipendenza estensibile basata su notifica di NCache con Mongo DB, è necessario configurare la dipendenza personalizzata on NCache prima e distribuisci i tuoi rispettivi file DLL su NCache Server.
Nella GIF di seguito, ho distribuito un provider denominato MongoDbNotifyExtensibleDependencyProvider
insieme a tutte le sue dipendenze dalla cache. Implementa il ICustomDependencyProvider
interfaccia. È responsabile della creazione di un oggetto dipendenza per il CacheItem. Affinché la dipendenza venga attivata correttamente, il file NotifyExtensibleDependency
classe deve essere implementata. Questa classe ascolterà il flusso di modifiche di MongoDB e attiverà le dipendenze in caso di modifica dei dati in Mongo DB.
Inoltre, in questo esempio, sto usando un'implementazione open source di ICustomDependencyProvider
ed NotifyExtensibleDependency
disponibile su GitHub.
NCache Dettagli Configurazione delle dipendenze personalizzate GitHub Repository
Distribuzione su applicazione client
Ad esempio, desideri utilizzare Mongo DB come database per il tuo negozio di e-commerce e desideri memorizzare nella cache i dati utilizzati di frequente NCache. Il tuo negozio conterrà i dati di oltre un milione di prodotti e milioni di transazioni avranno luogo ogni giorno. NCache aiuterà a ridurre il carico sul database Mongo DB, ma i dati all'interno della cache tendono a diventare obsoleti.
Avere dati obsoleti all'interno della cache può causare problemi a te e ai tuoi clienti. Fortunatamente, la funzione Dipendenza estensibile basata su notifica di NCache mitiga il problema dei dati obsoleti garantendo la funzionalità ottimale del tuo negozio di e-commerce.
Nell'esempio seguente, un prodotto viene caricato dal database in base al suo ID. Quindi NotifyExtensibleDependency
viene creato e registrato rispetto al prodotto recuperato. Infine, il prodotto, sotto forma di CacheItem viene inserito nella cache con la chiave specificata.
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 Dettagli NotificaExtensibleDependency Operazioni nella cache in NCache
Utilizzo del provider di lettura
Un'altra caratteristica importante di NCache Europe è Provider di lettura. Questa funzione ti consente di cercare i dati all'interno di Mongo DB direttamente quando non vengono trovati nella cache. Quando l'elemento viene trovato all'interno del database, viene automaticamente archiviato anche all'interno della cache; così, risparmiando tempo prezioso. Puoi utilizzare questa funzione nelle tue applicazioni Mongo DB per migliorare ulteriormente le tue prestazioni.
L'esempio di codice seguente recupera un elemento con read-through abilitato, corrispondente alla chiave specificata "Product:1001" utilizzando il Get<>
metodo.
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 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 Mongo 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 Mongo DB per mantenere i dati aggiornati per un accesso e un'elaborazione rapidi.