Azure Cosmos DB ist das Neue NoSQL cloudbasierte Datenbanklösung, die in letzter Zeit stark an Popularität gewonnen hat. Jeder weiß, dass die Verwendung von Caching mit Cosmos DB die Anwendungsleistung steigert und die Transaktionskosten optimiert, indem die Zugriffe auf die Datenbank reduziert werden.
Das Zwischenspeichern von Cosmos DB-Daten in einem verteilten Cache kann jedoch dazu führen, dass zwei Kopien dieser Daten erstellt werden, eine in der Datenbank und eine im Cache. Wenn eine Anwendung, die keinen Zugriff auf Ihren Cache hat, diese Daten in Cosmos DB direkt ändert, erkennt Ihr Cache dies nicht. Dies führt dazu, dass Ihr Cache im Vergleich zur Datenbank über eine ältere Kopie der Daten verfügt.
Diese veralteten Daten stellen ein großes Problem bei Anwendungen mit vielen Transaktionen und mehreren Umgebungen dar, bei denen die Arbeit mit veralteten Daten große Auswirkungen auf die Leistung hat. In diesem Blog bespreche ich, wie Sie Caching weiterhin nutzen und trotzdem das Problem „veralteter Daten“ vermeiden können.
Cache-Synchronisierung mit Cosmos DB unter Verwendung NCache
NCache ist eine sehr leistungsstarke verteilte Caching-Lösung mit zahlreichen leistungsstarken Funktionen. Genau wie jeder verteilte Cache, NCache sitzt zwischen der Datenbank und der Anwendung selbst und speichert die Daten aus der Datenbank zwischen, um sie von der Anwendung zu verwenden; Dadurch wird die Lese-/Schreibzeit exponentiell verkürzt. Es löst auch das Problem veralteter Daten (bereits besprochen) durch eine Funktion namens NotifyExtensibleDependency.
Mit NotifyExtensibleDependency können Sie Ihre eigene benutzerdefinierte Datenabhängigkeitslogik schreiben, in der eine Benachrichtigung aus einer Datenbank (in diesem Fall Cosmos DB) verarbeitet wird NCache unter Verwendung der Feed ändern Mechanismus von Cosmos DB.
Jede Änderung in der Cosmos DB kann mithilfe der Cosmos DB-Change-Feed-Prozessorlogik erfasst werden, die in den NotifyExtensibleDependency-Code integriert ist. Auf diese Weise kann der Ereignisbehandlungsmechanismus verwendet werden, um die Cache-Invalidierung als Reaktion auf Änderungen im Datenbankinhalt zu erzwingen und so sicherzustellen, dass veraltete Daten nicht im Cache verbleiben.
Sie haben auch die Möglichkeit, die ReadThru-Anbieterfunktion von zu nutzen NCache um die Leistung Ihrer Cosmos DB-Anwendung weiter zu verbessern. Mit dieser Funktion können Sie dem Cache ermöglichen, direkt in der Datenbank nach Elementen zu suchen, die nicht im Cache vorhanden sind. Der Cache sucht nicht nur nach den angeforderten Elementen in der Datenbank (Cosmos DB), sondern speichert die angeforderten Elemente bei erfolgreicher Erkennung auch im Cache.
NCache Details NotifiyExtensibleDependency Read-Through-Caching
Cache mit Cosmos DB synchronisieren: Ein kurzes Beispiel
Sie verwenden beispielsweise Cosmos DB als Datenbank für Ihren E-Commerce-Shop und speichern dort häufig verwendete Daten zwischen NCache. Ihr Geschäft enthält Zehntausende Produkte und durchschnittlich finden täglich eine Million Transaktionen statt. NCache hilft Ihnen dabei, die Belastung Ihrer Cosmos-Datenbank zu reduzieren, es besteht jedoch die Möglichkeit, dass die Daten im Cache veraltet sind. Wie oben besprochen, NCache löst dieses Problem durch die NotifyExtensibleDependency-Funktion, die eine optimale Funktionalität Ihres E-Commerce-Shops gewährleistet.
Das folgende Codebeispiel veranschaulicht die Verwendung der NotifyExtensibleDependency-Funktion. In diesem Beispiel wird ein Produkt anhand seiner ID aus der Datenbank geladen. Anschließend wird 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.
Außerdem ist die CosmosDbNotificationDependency der Name des Anbieters, der in Ihrem Cache bereitgestellt wurde. Dieser Anbieter implementiert die ICustomDependencyProvider Schnittstelle.
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); |
Weitere Details zur Implementierung finden Sie in unserer GitHub Repository.
NCache Details NotifiyExtensibleDependency Cache-Operationen in NCache
Durchleseanbieter für Cache
Die Read-Through-Funktion von NCache (wie der Name schon sagt) ermöglicht es Ihnen, den Cache direkt in Ihre Datenbank (Cosmos DB) einzulesen, wenn Elemente nicht im Cache gefunden werden. Diese Funktion erspart Ihnen grundsätzlich die Mühe, selbst in der Datenbank nach Artikeln zu suchen, wenn die angeforderten Artikel nicht im Cache gefunden werden. Durch diese Funktion funktioniert nicht nur NCache liest Ihre Datenbank nach den angeforderten Artikeln, fügt sie aber auch für Sie in den Cache ein, damit Sie sie in Zukunft schnell abrufen können.
Das folgende Codebeispiel ruft mithilfe der Get<>-Methode ein Element mit aktiviertem Durchlesen ab, das dem angegebenen Schlüssel „Product:1001“ entspricht.
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 Details Read-Through-Caching Cache-Operationen in NCache
Zusammenfassung
Um zusammenzufassen, NCache bietet eine flexible Lösung zum Synchronisieren von Daten zwischen Cosmos DB und dem Cache und vermeidet so Dateninkonsistenzen. NCache, eine In-Memory-Lösung für verteiltes Caching, kann ein ideales Medium für Cosmos DB sein, um Daten auf dem neuesten Stand zu halten und so den Zugriff und die Verarbeitung zu erleichtern.
NCache Details Herunterladen NCache Cloud-Bereitstellungsoptionen für NCache.