Das Zwischenspeichern häufig verwendeter Daten Ihrer Anwendung ist ein äußerst kompetenter Schachzug. Das Dilemma besteht jedoch darin, sicherzustellen, dass die zwischengespeicherten Daten mit Ihrer Oracle-Datenbank synchronisiert bleiben. Der Trick, dies zu umgehen, besteht darin, Datenabläufe zu verwenden, bei denen Sie die TTL (Time To Live) des Elements schätzen und es dann zwischenspeichern.
Unabhängig davon, wie beliebt dieses Schema ist, handelt es sich hierbei lediglich um eine fundierte Vermutung darüber, wie lange das Element unverändert in der Datenbank verbleiben wird. Und Vermutungen sind nicht immer korrekt. Wenn Ihre Anwendung datensensibel ist und das Abrufen und Verarbeiten ungenauer Daten ihren Zweck zunichte macht, kostet Sie die Verwendung des Ablaufdatums viel Geld.
Was Sie aus dieser misslichen Lage erspart, ist die Verwendung eines Datenbanksynchronisierungsmechanismus in Ihrem Cache, z NCache, das die entsprechenden Cache-Daten automatisch entfernt, wenn sie in der Oracle-Datenbank aktualisiert werden.
NCache Details Cache-Abhängigkeit von der Datenbank Datenablauftechniken
Die richtigen NCache zur Synchronisierung mit Oracle Server
Oracle Dependency verwendet Ereignisbenachrichtigungen, die alle Datenbank-Clients benachrichtigen, wenn sich ein Datensatz in der Datenbank ändert. Back-End-Informationen: NCache nutzt diese Funktion, um sich als Oracle Server-Client zu registrieren. Dies bedeutet, dass bei jeder Datenänderung im Oracle-Datensatz NCache wird automatisch benachrichtigt. Mithilfe dieser Informationen NCache führt eine Karte aller zwischengespeicherten Elemente mit ihren entsprechenden Datensätzen. Also wann immer NCache Wird über eine Änderung benachrichtigt, macht es das entsprechende Cache-Element aus dem Cache ungültig und ruft das aktualisierte Element ab, wenn die Client-App das nächste Mal danach fragt.
Lass uns synchronisieren NCache mit Oracle-Server
Ich werde ein einfaches Beispiel einer E-Commerce-Anwendung nehmen (.NET Core basiert), deren gesamter Erfolg in seiner Genauigkeit liegt. Tausende Kunden greifen jede Minute für Online-Einkäufe auf diese Anwendung zu, daher wurden die Daten dieser Anwendung zwischengespeichert.
Nehmen wir nun ein sehr häufiges Szenario, in dem KundeA kaufte die letzte Xbox Series X, die es im Laden gab. Der App-Server entfernt die Menge dieses Artikels aus der Datenbank, aber der Cache erkennt diese Änderung immer noch nicht. Diese Inkonsistenz führt zu Wut bei den Kunden KundeB Gefällt das gleiche Produkt, bezahlt es und wird mit einer erfolgreichen Zahlungsnachricht benachrichtigt, erhält aber nicht seine neueste Xbox Series X.
Um sicherzustellen, dass die Anwendung nicht bei jeder Datenänderung in der Oracle-Hauptdatenbank mit Datenintegritätsproblemen konfrontiert wird, NCache bietet Unterstützung von Oracle-Abhängigkeit.
Um diese Abhängigkeitsfunktion zu verwenden, NCache ermöglicht Ihnen die Parametrisierung Ihrer Oracle-Abfrage mit OracleCache-Abhängigkeit Methode, die zur Laufzeit Parameterwerte entgegennimmt. Dadurch verringert sich die Häufigkeit, mit der Ihre Abfrage auf dem Oracle-Server kompiliert werden muss, und die Leistung der Anwendung wird um das Zehnfache verbessert.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
string connectionString = ConfigurationManager.AppSettings["connectionstring"]; string query = "SELECT ROWID, ProductID, ProductName, UnitPrice FROM Products WHERE ProductID = :productID"; var param = new OracleCmdParams(); param.Type = (OracleCmdParamsType.VarChar); param.Value = "XBoxX"; param.Direction = OracleParameterDirection.Input; // Adding the populated parameter to a dictionary Dictionary<string, OracleCmdParams> oracleParam = new Dictionary<string, OracleCmdParams>(); oracleParam.Add("productID", param); // Create Oracle Dependency var oracleDependency = new OracleCacheDependency(connString, query, OracleCommandType.Text, oracleParam); Product product = FetchProductFromDB(param.Value); string key = $"Product:{product.ProductID}"; // Create a CacheItem, add Oracle dependency, and cache it var cacheItem = new CacheItem(product); cacheItem.Dependency = oracleDependency; cache.Insert(key, cacheItem); |
NCache Details Cache-Abhängigkeit von Oracle Richten Sie die Oracle-Umgebung ein
Mit OracleCacheDependency können Sie noch viel mehr tun. Hier ist eine Liste einiger sehr nützlicher Funktionen, die von dieser Oracle-Abhängigkeit unterstützt werden.
Cache-Element automatisch über Read-Thru-Provider neu laden
OracleCacheDependency ist dafür verantwortlich, ein Cache-Element ungültig zu machen, sobald es sich in der Datenquelle ändert. NCache bietet Lesen Sie den Anbieter der unterstützenden Quelle durch falls Sie möchten, dass der Cache nicht nur ungültig macht, sondern auch die neueste Version des geänderten Elements vom Oracle-Server abruft. Mit Durchlesen Option aktiviert, NCache ruft die ReadThru Provider, um die aktualisierten Daten abzurufen, wenn Oracle Server den Cache über eine Änderung benachrichtigt.
Der folgende Code erklärt, wie Sie diese Funktionalität erreichen können:
1 2 3 4 5 6 7 8 9 |
// Create a new cache item and add oracle dependency to it CacheItem item = new CacheItem(product); item.Dependency = oracleDependency; // Resync if enabled, will automatically resync cache with Oracle server item.ResyncOptions = new ResyncOptions(true); //Add cache item in the cache with Oracle Dependency and Resync option enabled cache.Insert(key, item); |
NCache Details Cache-Abhängigkeit von Oracle Read-Through-Anbieter
Auf gespeicherten Prozeduren basierende Oracle-Abhängigkeit
NCache unterstützt Auf gespeicherten Prozeduren basierende Oracle-Abhängigkeit wenn Sie es vorziehen, alle Ihre Oracle-Abfragen in der Oracle-Datenbank zu behalten. Diese gespeicherten Prozeduren werden auf dem Oracle-Server vorkompiliert und laufen viel schneller als dynamische Oracle-Abfragen.
Um eine gespeicherte Prozedur in Oracle zu erstellen, sehen Sie sich dieses Beispiel an:
1 2 3 4 5 6 |
CREATE PROCEDURE SelectProduct (ProductID IN VarChar) AS BEGIN SELECT ProductID, Quantity, Price FROM Products WHERE ProductID = :productID; END; |
Der Aufruf dieser gespeicherten Prozedur in Ihrer .NET-Anwendung ist einfach. Verwenden Sie den folgenden Ausschnitt als Beispiel.
1 2 3 4 5 6 7 8 9 10 |
OracleCmdParams param = new OracleCmdParams(); param.Type = (OracleCmdParamsType.VarChar); param.Value = "XBoxX"; param.Direction = OracleParameterDirection.Input; var oracleCmdParams = new Dictionary<string, OracleCmdParams>(); oracleCmdParams.Add("productID", param); // Create Oracle Dependency var oracleDependency = new OracleCacheDependency(connString, SelectProduct, OracleCommandType.StoredProcedure, oracleCmdParams); |
NCache Details Cache-Abhängigkeit von Oracle Oracle-Abhängigkeit mithilfe gespeicherter Prozeduren
Warum synchronisieren? NCache mit Oracle Server?
Niemand möchte, dass seine Anwendung, an der er so hart gearbeitet hat, scheitert, nur weil sie veraltete Daten verarbeitet. Auf diese Weise verlieren Sie sowohl Ihr Geschäft als auch Ihr Gesicht. Aber NCache, sehr zu Ihrer Erleichterung, stellt Ihnen eine Oracle-Abhängigkeit zur Verfügung, die Ihren Cache mit Ihrer Oracle-Datenbank synchronisiert hält, um sicherzustellen, dass der Cache, den Sie zu Ihrem Vorteil nutzen, Sie nicht im Stich lässt.
NCache Details Herunterladen NCache Editionsvergleich