Heutzutage benötigen viele Unternehmen die Rechenleistung, um in Spitzenzeiten mit einer großen Anzahl von Transaktions- und Referenzdaten umgehen zu können. Zum Beispiel Banken, die Kundentransaktionen während der Feiertage bearbeiten. Eine große Herausforderung besteht jedoch darin, diese Daten zu verarbeiten, ohne die Leistung Ihrer Anwendung zu beeinträchtigen. Im Allgemeinen sind Anwendungsebenen linear skalierbar, Datenbanken jedoch nicht. Hohe Transaktionslasten können zu einem Datenbankengpass führen und Ihr System überlasten. Dieser Engpass kann durch die Einführung eines verteilten In-Memory-Caching für die .NET-Anwendung für einen schnelleren Datenzugriff behoben werden.
Ein verteilter In-Memory-Cache erstreckt sich über mehrere Server, funktioniert aber als einzelne Cache-Instanz und ist für die Anwendungen, die ihn verwenden, transparent. Es reduziert die Belastung von Back-End-Servern und Datenbanken, da alle aktiven oder vorübergehenden Daten aus dem Cache bereitgestellt werden.
NCache Details Dynamisches Clustering Verteiltes Caching
NCache ist ein Open-Source, verteilter In-Memory-Cache für .NET- und Java-basierte Anwendungen. NCache trägt dazu bei, schnelle Transaktionsgeschwindigkeiten und Datenkonsistenz zu erreichen, wenn neue Server zu diesem Cache-Cluster hinzugefügt werden, um Ihren wachsenden Leistungsanforderungen gerecht zu werden.
Die folgende Abbildung veranschaulicht diese Architektur:
Zwischengespeicherte Daten werden gleichmäßig auf alle Server verteilt und sogar repliziert, um Datenverluste zu vermeiden und sicherzustellen hohe Verfügbarkeit. Daher verarbeitet der verteilte Cache Hunderttausende von Anfragen pro Sekunde und verhindert so Ausfallzeiten während Spitzenlasten.
Diese verteilte Struktur stellt sicher, dass es keinen Single Point of Failure gibt, denn wenn auch nur ein Cache-Server ausfällt, empfängt er Daten von den anderen Serverknoten. Daher ist Ihr Unternehmen nicht betroffen und kann bei Bedarf problemlos weitere Server zum verteilten Cache hinzufügen.
Zu den idealen Daten für das Caching gehören häufig leseintensive, aber gelegentlich geänderte, um die maximale Leistung verteilter Caches zu erreichen. Verteilte Caches speichern die Daten als Schlüsselwert Paare, wodurch die Verwendung und der Zugriff einfach sind.
NCache Details Dynamisches Clustering Caching-Topologien
Die richtigen NCache als verteilter Cache
Neben einer dramatischen Leistungssteigerung Ihrer .NET-Anwendungen sorgen verteilte Caches wie z NCache mehrere bereitstellen erweiterte Funktionen die die Cache-Nutzung noch flexibler machen, um verschiedenen Anwendungsfällen und Geschäftsanforderungen gerecht zu werden – einschließlich der unten aufgeführten.
NCache CRUD-Operationen
Sie können einen verteilten Cache einfach in Ihre .NET-Anwendung integrieren, indem Sie Verbindung zum Cache und Erstellen eines Schlüssels für Ihr aus der Datenbank abgerufenes Cache-Element. Sie können das Element dann mit einem Ablauf von 30 Minuten in den Cache einfügen und über diese Verbindung abrufen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Specify the cache name to connect with it ICache cache = CacheManager.GetCache("demoCache"); // Get product from database var product = FetchProductFromDB(1001); // Generate a key for the cache item string key = "Product:1001"; // Create cache item and add 30sec sliding expiration var cacheItem = new CacheItem(product); cacheItem.Expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(30)); // Now add this item in cache for future use cache.Insert(key, cacheItem); // Fetch item from cache product = cache.Get(key); |
NCache Details Gleitender Ablauf NCache
Synchronisieren C.Schmerzen mit Datenbase
Es kann vorkommen, dass die zwischengespeicherten Daten in der Datenbank geändert werden. Diese Situation führt zu einem Integritätsproblem, bei dem Ihre zwischengespeicherten Daten veraltet sind, ohne dass Ihre Anwendung dies bemerkt. Um dieses Problem zu lösen, NCache kann Ihren Cache automatisch mit der Datenbank synchronisieren. Folglich wird jedes Mal, wenn eine Änderung in der Datenbank für einen zwischengespeicherten Datensatz auftritt, dieser automatisch aus dem Cache entfernt, um die Datenaktualität sicherzustellen.
Um diesen Mechanismus weiter zu unterstützen, NCache unterstützt Durchschreiben, Lader & Refresher und Persistenzspeicher die die Daten im Cache mit der Datenbank synchronisiert hält.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Get orders against customerID from DB var order = FetchOrderByCustomerID("ALFKI"); // Generate unique cache key for the order string key = $"Order:{order.OrderID}"; CacheItem item = new CacheItem(order); // Create SQL query to select the data from database string query = "SELECT CustomerID, Address, City FROM dbo.Customers WHERE CustomerID = 'ALFKI';"; //Specify database connection string and the query to create and set SQLCacheDependency. item.Dependency = new SqlCacheDependency(dbConnString, query); // Insert the item into the cache cache.Insert(key, item); |
NCache Details DB-Synchronisierung Cache-Datenabhängigkeit
SQL-Abfragen
NCache unterstützt ein SQL Abfragemechanismus, mit dem Sie Ihren Cache nach einem bestimmten Kriterium durchsuchen können, und gibt die erforderliche Ergebnismenge zurück. NCache verwendet eine Abfragesprache, die der nativen strukturierten SQL-Sprache sehr nahe kommt, was das Abfragen von indizierten zwischengespeicherten Daten vereinfacht. Es bietet ADO.NET-kompatible APIs wie ExecuteReader, AusführenSkalar und AusführenNonQuery um Daten aus dem Cache zu suchen (SELECT) und zu entfernen (DELETE).
NCache Details SQL- und LINQ-Unterstützung in NCache SQL-Abfrage
ExecuteReader wird verwendet, um Daten zu durchsuchen und Schlüssel-Wert-Paare zurückzugeben. Bei Verwendung der ExecuteReader-Methode können Sie angeben, ob nur die Schlüssel oder Schlüssel und ihre Daten (entweder als Ganzes oder in Teilen) zurückgegeben werden sollen.
1 2 3 4 5 6 7 8 9 10 11 |
//string query = "SELECT * FROM FQN.Product WHERE UnitsInStock > ?"; var queryCommand = new QueryCommand(query); queryCommand.Parameters.Add("UnitsInStock",0); ICacheReader reader = cache.ExecuteReader(queryCommand); while (reader.Read()) { string ID = reader.GetValue("ProductID"); string Name = reader.GetValue("ProductName"); } |
LINQ-Abfragen
LINQ ist eine generische .NET-Abfragesprache, mit der Sie Daten aus Ihrer Datenquelle suchen und herausfiltern können. Die LINQ-Syntax ist der von SQL ziemlich ähnlich, bietet Ihnen jedoch in Bezug auf die Funktionalität bessere und optimiertere Abfragemethoden bei der Abfrage Ihrer NCache Server. Es bietet die Möglichkeit, effizientere Abfrageausdrücke zu ermöglichen und gleichzeitig die Syntaxprüfung während der Codekompilierung zu ermöglichen.
NCache integriert LINQ nahtlos, um Informationen im Cache über einen LINQ-Anbieter abzufragen. Der Linkanbieter vereinfacht die Ausführung von LINQ-Abfragen über den verteilten Cache und verbessert gleichzeitig die Leistung der Anwendung, ohne das LINQ-Objektmodell zu ändern.
Abfrageausdrücke fragen Daten von Ihren LINQ-fähigen verteilten Cacheservern ab und wandeln sie um.
1 2 3 4 |
IQueryable products = new NCacheQuery(cache); IQueryable product = from prod in products where prod.UnitsInStock > 10 select prod; |
NCache Details LINQ für verteiltes Caching Abfragbar
Abschließende Gedanken
Abgesehen von der Bereitstellung von Leistung und Skalierbarkeit, NCache bietet andere nützliche Funktionen zu. Und doch verbirgt es seine implementierungsbezogene Komplexität und bietet eine einfache Möglichkeit, es zu verwenden. Wenn Sie nach einem verteilten Cache auf .NET-Basis ohne Kompromisse bei Leistung und Skalierbarkeit suchen, sind Sie hier genau richtig NCache. Es ist eine reine .NET-Plattform mit allem Schnickschnack des modernen verteilten Cachings