Verteilter Cache wird immer beliebter, da es eine leistungsstarke Möglichkeit ist, die Leistung und Skalierbarkeit Ihrer Anwendung zu steigern und extreme Transaktionslasten ohne Verlangsamung zu bewältigen. Sowohl .NET- als auch Java-Anwendungen verwenden es jeden Tag mehr und mehr.
Eine Herausforderung, vor der Menschen mit verteiltem Cache stehen, ist jedoch das Zuordnen und Speichern relationale Daten in einem HashTable (Schlüssel, Wert)-Paarungsspeicher, der ein verteilter Cache ist. Die meisten Caches bieten heute keinen Mechanismus, um damit umzugehen. Heute werde ich die Datenabhängigkeit besprechen, die ASP.NET Cache bereitstellt, und das NCache vom ersten Tag an integriert.
Genau wie ASP.NET Cache, in NCache, Datenabhängigkeit ermöglicht es Ihnen, eine Abhängigkeit im verteilten Cache zwischen zwei zwischengespeicherten Elementen anzugeben. Zwischengespeichertes Element A hängt von zwischengespeichertem Element B ab. Und wenn B jemals aktualisiert oder aus dem verteilten Cache entfernt wird, wird A automatisch entfernt. Dadurch wird sichergestellt, dass eine Einschränkung der referenziellen Integrität zwischen A und B in der Datenbank auch im verteilten Cache berücksichtigt wird. Sie können auch eine kaskadierende Datenabhängigkeit angeben, wobei A von B und B von C abhängt. Wenn Sie dann C aktualisieren oder entfernen, werden sowohl A als auch B entfernt. Hier ist ein kurzes Beispiel für Datenabhängigkeit:
NCache Details Verwalten relationaler Daten Datenabhängigkeitsdokumente
Mit Datenabhängigkeit können Sie Eins-zu-eins-, Eins-zu-viele- und Viele-zu-viele-Beziehungen im verteilten Cache erstellen. So würden Sie mit verschiedenen Szenarien umgehen:
Eins-zu-eins-Beziehung
A hat eins-zu-eins mit B. Fügen Sie B ohne Datenabhängigkeit hinzu. Fügen Sie dann A hinzu und geben Sie eine Datenabhängigkeit für B an. Wenn A und B beide eine gegenseitige Abhängigkeit haben, aktualisieren Sie anschließend B und geben Sie eine Abhängigkeit von A an.
Eins-zu-viele-Beziehung
A hat Eins-zu-Viele mit B. Fügen Sie A zuerst ohne Datenabhängigkeit hinzu. Fügen Sie dann ein oder mehrere B-Elemente hinzu und geben Sie für alle eine Datenabhängigkeit für das angegebene A an. Auf diese Weise werden, wenn A aktualisiert oder entfernt wird, alle Bs automatisch von entfernt NCache.
Viele-zu-viele-Beziehung
A und B haben viele-zu-viele miteinander. Fügen Sie ein oder mehrere A hinzu. Fügen Sie dann ein oder mehrere B hinzu und geben Sie Datenabhängigkeit für die entsprechenden A an. Gehen Sie dann zurück und aktualisieren Sie die A's, um die Datenabhängigkeit für die entsprechenden B's anzugeben.
Hier ist ein einfaches Beispiel für das Erstellen einer Eins-zu-eins-Abhängigkeit im Cache.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public static void CreateDependencies(ICache _cache) { try { string keyB = "objectB-1000"; Object objB = new Object(); string keyA = "objectA-1000"; Object objA = new Object(); // Initializing cacheItems var itemOne = new CacheItem(objA); var itemTwo = new CacheItem(objB); // Adding objA dependent on ObjB itemOne.Dependency = new KeyDependency(keyB); //Adding items to cache _cache.Add(keyB, itemTwo); _cache.Add(keyA, itemOne); // Removing "objB" automatically removes “objA” as well _cache.Remove(keyB); _cache.Dispose(); } catch (Exception e) { throw; } } |
Damit NCache ermöglicht es Ihnen, die Datenabhängigkeit zu nutzen und Datenbeziehungen im verteilten Cache anzugeben. Laden Sie eine voll funktionsfähige 60-Tage-Testversion von herunter NCache Enterprise und probiere es selbst aus.
Danke, dass Sie den Blog geteilt haben, es wurde gut über die Datenabhängigkeit erklärt, es hat sich gelohnt, Zeit zu investieren, um diesen Blog zu lesen.
Hallo Iqbal, vielen Dank, dass Sie meinen Artikel geteilt haben. Können Sie bitte den verteilten Cache erklären? Bedeutet dies, dass der Cache auf verschiedenen (physischen) Frontend-Servern und DB-Servern verwaltet wird? Ich habe ein Szenario, in dem Frontend-Server (FS)1 den lokalen Cache C1 verwaltet. FS2 verwaltet seinen eigenen lokalen Cache C2. FS3 verwaltet seinen eigenen lokalen CacheC3. Es gibt einen DB-Server mit globalem Cache-GC. Alle lokalen Caches C1, C2, C3 müssen von GC abhängen. Wenn GC aktualisiert wird, wird der gesamte lokale Cache ungültig. Ich weiß nicht, wie das funktionieren soll, weil wir meiner Meinung nach den Speicher auf dem anderen System nicht kontrollieren können? Bitte werfen Sie etwas Licht darauf. Danke, Khusi
NCache ist ein außerhalb des Prozesses verteilter In-Memory-Cache. Es kann zur Laufzeit einen Cluster von Cache-Knoten bilden und über mehrere Anwendungen verteilt werden.
Hier ist, wie NCache wird Ihr Szenario behandeln:
Sie können einen globalen geclusterten Cache (z. B. mit 2 Knoten im Cluster) auf den DB-Servern oder dedizierten Cache-Servern erstellen und dann die Funktion „Client-Cache“ auf jedem Front-End-Server FS1, FS2 und FS3 nutzen. NCache Der Client-Cache ist ein lokaler Cache, der ausgeführt wird NCache Client-Boxen (Web-/App-Server sind NCache Clients) und speichert eine Kopie der Daten lokal auf der Client-Box, auf die am häufigsten vom Cluster-Cache zugegriffen wird.
Nachfolgende Aufrufe für die gleichen Daten werden direkt aus dem lokalen Client-Cache bedient, wodurch mehr Leistung erzielt wird, indem Netzwerkreisen eingespart werden. Client-Caches können auch prozessintern sein.
Die Datensynchronisation wird automatisch von verwaltet NCache. Im Falle von Aktualisierungen des globalen Cluster-Cache werden Client-Caches Elemente automatisch ungültig machen/entfernen und bei einem späteren Zugriff eine aktualisierte Kopie aus dem Cluster-Cache abrufen.
Hallo Iqbal,
Vielen Dank für den informativen Artikel. Können Sie bitte den verteilten Cache erklären? Bedeutet es, dass Cache auf verschiedenen (physischen) Frontend-Servern und DB-Servern verwaltet wird?
Ich habe ein Szenario – Frontend Server (FS)1 verwaltet den lokalen Cache C1. FS2 verwaltet seinen eigenen lokalen Cache C2. FS3 verwaltet seinen eigenen lokalen CacheC3. Es gibt einen DB-Server mit globalem Cache-GC. Alle lokalen Caches C1, C2, C3 müssen von GC abhängen. Wenn GC aktualisiert wird, wird der gesamte lokale Cache ungültig. Ich weiß nicht, wie das funktionieren soll, weil wir meiner Meinung nach den Speicher auf dem anderen System nicht kontrollieren können?
Bitte werfen Sie etwas Licht in diese Sache.
Vielen Dank
Khusi
Es ist wirklich eine schöne und hilfreiche Information. Ich freue mich, dass Sie diese hilfreichen Informationen mit uns geteilt haben. Bitte halten Sie uns so auf dem Laufenden. Danke für das Teilen.