Mongo DB ist eine NoSQL, skalierbare, quelloffene, performante und dokumentenorientierte Datenbank. Es ist eines der besten NoSQL databaseist auf dem Markt. Die Verwendung von Caching mit Mongo DB gibt Anwendungen eine deutliche Leistungssteigerung, indem die Fahrten zur Datenbank reduziert werden. Durch das Zwischenspeichern von Mongo DB-Daten in einem verteilten Cache werden jedoch zwei Kopien dieser Daten erstellt. Eine Kopie befindet sich in Mongo DB und eine Kopie befindet sich im verteilten Cache. Wenn eine Anwendung die Daten in Mongo DB direkt ändert, veralten die Daten im Cache.
Für Anwendungen mit vielen Transaktionen, mehreren Umgebungen und auf Unternehmensebene sind diese veralteten Daten ein großes Problem. In diesem Blog werde ich erörtern, wie Sie weiterhin einen verteilten Cache neben Mongo DB verwenden und gleichzeitig das Problem veralteter Daten vermeiden können.
Synchronisieren Sie den Cache mit Mongo DB Using NCache
NCache ist ein bekannter verteilter Cache für .NET Framework/ .NET Core, Java und Node.js. NCache bietet eine Vielzahl von Funktionen, die die Leistung Ihrer Anwendung sprunghaft verbessern können. Unter diesen zahlreichen Funktionen befindet sich eine Funktion, die als bekannt ist Benachrichtigungsbasierte erweiterbare Abhängigkeit. Diese Funktion behebt das Problem veralteter Daten mit MongoDB (das wir bereits besprochen haben).
Das NotifyExtensibleDependency
-Klasse können Sie Ihre benutzerdefinierte Abhängigkeitslogik schreiben, in der Sie durch Benachrichtigungen über die Änderungen benachrichtigt werden, die in der Datenbank stattfinden. NCache verarbeitet diese Benachrichtigungen unter Verwendung einer Funktion von Mongo DB (eingeführt in Version 3.6), bekannt als Stream ändern. Sobald diese Benachrichtigungen verarbeitet wurden, werden veraltete Daten im Cache basierend auf dem von Ihnen geschriebenen Code ungültig gemacht.
Die Change Stream-Logik ist in die integriert NotifyExtensibleDependency
. Sie können diesen Change Stream ändern, um Benachrichtigungen zu Vorgängen zum Hinzufügen, Aktualisieren oder Löschen zu erhalten, die innerhalb der Datenbank stattfinden. Die Löschvorgänge können jedoch nicht nachverfolgt werden. Um also Löschvorgänge nachzuverfolgen, wird ein Aktualisierungsvorgang mit Ablaufdatum verwendet.
Es sollte auch beachtet werden, dass Mongo DB Change Stream für eigenständige Datenbanken nicht unterstützt. Sie müssen sicherstellen, dass Ihre Mongo DB-Datenbank über einen Replikatsatz verfügt, damit die Change Stream-Funktion funktioniert.
NCache Details NCache NotifyExtensibleDependency NCache Docs
Cache mit Mongo DB synchronisieren: Ein schnelles Beispiel
Um Mongo DB mit zu verwenden NCache musst du konfigurieren Benutzerdefinierte Abhängigkeit in NCache zuerst und stellen Sie es anschließend in Ihrer Client-Anwendung bereit. Dies wird im Folgenden erklärt:
NCache Benutzerdefinierte Abhängigkeitskonfiguration
So verwenden Sie die benachrichtigungsbasierte erweiterbare Abhängigkeitsfunktion von NCache mit Mongo DB müssen Sie Benutzerdefinierte Abhängigkeit konfigurieren on NCache zuerst und stellen Sie Ihre jeweilige(n) DLL-Datei(en) auf der bereit NCache Server.
Im GIF unten habe ich einen Anbieter mit dem Namen bereitgestellt MongoDbNotifyExtensibleDependencyProvider
zusammen mit all seinen Abhängigkeiten vom Cache. Es implementiert die ICustomDependencyProvider
Schnittstelle. Es ist verantwortlich für die Erstellung eines Abhängigkeitsobjekts für die CacheItem. Damit die Abhängigkeit ordnungsgemäß ausgelöst wird, muss die NotifyExtensibleDependency
Klasse muss umgesetzt werden. Diese Klasse hört auf den MongoDB Change Stream und löst Abhängigkeiten bei Datenänderungen in Mongo DB aus.
Außerdem verwende ich in diesem Beispiel eine Open-Source-Implementierung von ICustomDependencyProvider
und NotifyExtensibleDependency
verfügbar auf GitHub.
NCache Details Benutzerdefinierte Abhängigkeitskonfiguration GitHub-Repository
Bereitstellung auf Client-Anwendung
Sie möchten beispielsweise Mongo DB als Datenbank für Ihren E-Commerce-Shop verwenden und häufig verwendete Daten darin zwischenspeichern NCache. Ihr Geschäft wird Daten von über einer Million Produkten enthalten, und täglich finden Millionen von Transaktionen statt. NCache hilft bei der Verringerung der Belastung Ihrer Mongo DB-Datenbank, aber die Daten im Cache neigen dazu, veraltet zu werden.
Veraltete Daten im Cache können Probleme für Sie und Ihre Kunden verursachen. Glücklicherweise ist die Benachrichtigungsbasierte erweiterbare Abhängigkeitsfunktion von NCache mindert das Problem veralteter Daten und gewährleistet die optimale Funktionalität Ihres E-Commerce-Shops.
Im folgenden Beispiel wird ein Produkt anhand seiner ID aus der Datenbank geladen. Dann NotifyExtensibleDependency
erstellt und für das abgerufene Produkt registriert. Schließlich das Produkt in Form von CacheItem wird mit dem angegebenen Schlüssel in den Cache eingefügt.
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 Details NotifiyExtensibleDependency Cache-Operationen in NCache
Read-Through-Anbieter verwenden
Ein weiteres herausragendes Merkmal von NCache lernen muss die Read-Through-Anbieter. Mit dieser Funktion können Sie direkt in Mongo DB nach Daten suchen, wenn diese nicht im Cache gefunden werden. Wenn das Element in der Datenbank gefunden wird, wird es automatisch auch im Cache gespeichert; So sparen Sie wertvolle Zeit. Sie können diese Funktion in Ihren Mongo DB-Anwendungen verwenden, um Ihre Leistung weiter zu verbessern.
Das folgende Codebeispiel ruft ein Element mit aktiviertem Read-Through ab, das dem angegebenen Schlüssel „Product:1001“ unter Verwendung von entspricht Get<>
Methode.
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 Details Read-Through-Caching Cache-Operationen in NCache
Zusammenfassung
Um zusammenzufassen, NCache bietet eine flexible Lösung zum Synchronisieren von Daten zwischen Mongo DB und dem Cache, wodurch Dateninkonsistenzen vermieden werden. NCache, eine verteilte In-Memory-Caching-Lösung, kann ein ideales Medium für Mongo DB sein, um aktuelle Daten für einen schnellen Zugriff und eine schnelle Verarbeitung zu halten.