Moderne Probleme erfordern moderne Lösungen. Und der Bedarf an schneller Leistung war schon immer ein Problem. NCache ist eine schnelle Lösung für Ihre kritischen Probleme wie Leistung und Skalierbarkeit. Es arbeitet effizient und deckt alle problematischen Bereiche in Ihrer Anwendung ab, obwohl Caching seinen Hauptzweck für leseintensivere Anwendungen hat. Dieser Blog erklärt ausführlich, wie NCache ist die beste Wahl für Ihre leseintensiven Anwendungen.
NCache Details Skalierbarkeit in NCache NCache Leistung
Die Notwendigkeit des Cachings
Beginnen wir mit dem Anfang und sehen, warum Caching benötigt wird. Seine einfache Antwort ist die Antwortzeit von Datenbanken. Es versteht sich von selbst, dass der primäre Speicher (Ihre Datenbank), der alle Daten an einem Ort enthält, aufgrund einer höheren Rücklaufquote ersticken kann. Was löst es? Caching – da es In-Memory-Speicher und eine schnellere Reaktionszeit bietet.
Zweitens hat ein Cache, der von Natur aus verteilt ist, im Gegensatz zu einer Datenbank keinen Single Point of Failure. Die Last wird aufgeteilt und somit weniger Chancen, dass Anfragen die Server ersticken.
Angesichts der oben genannten Fakten, die wir gerade besprochen haben, haben wir festgestellt, dass Caching am besten für Situationen geeignet ist, in denen Ihre Schreibintensität nicht sehr hoch, aber die Leseintensität relativ höher ist.
Betrachten wir eine Website mit Informationen über das Transportsystem. Die Busfahrpreise und Fahrzeiten sind in der Regel statisch, das heißt, sie ändern sich nicht häufig. Solche Anwendungen mit leseintensiveren Daten verfügen über eine Vielzahl von Funktionen, die von bereitgestellt werden NCache zur Durchführung schnellerer Lesevorgänge.
NCache Details NCache Für Daten-Caching Hochverfügbarkeit
NCache als leseintensiver Cache-Speicher
Bewerbungen mit leseintensiver Natur haben NCache um alle Leseoperationen so schnell wie möglich durchzuführen. NCache verfügt über eine Vielzahl von Funktionen für alle Arten von Lesevorgängen, z. B. das Abrufen einzelner oder mehrerer Elemente. Sobald der Cache Daten von der Datenbank empfängt, gehen alle Abrufvorgänge direkt an den Cache, um eine höhere Leistung und Skalierbarkeit zu erzielen.
NCache Details CRUD-Operationen Skalierbarkeit in NCache
Holen Sie sich den Betrieb NCache
NCache bietet verschiedene Überladungen der Erhalten() Methode zum Abrufen von Daten aus dem Cache für einen bestimmten Schlüssel. Diese Vorgänge sind synchroner Natur und geben ein Typobjekt zurück, das gemäß Ihrer benutzerdefinierten Logik umgewandelt wurde. Falls kein Element im Cache vorhanden ist, wird null zurückgegeben.
Sehen Sie sich den folgenden Code an, in dem ein Kunde Adressdetails sehen möchte, um sicherzustellen, dass sie korrekt sind, indem Sie die normale verwenden Erhalten() Verfahren:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Pre-condition: Cache is already running // Items are already present in the cache // Initialize Cache ICache cache = CacheManager.GetCache("demoCache"); string customerKey = "Customer:ALFKI"; // Retrieve the Customer object Customer customer = cache.Get<Customer>(customerKey); if (customer != null) { Console.WriteLine($"Customer: {customer.ContactName}, Address : {customer.Address}"); } |
NCache erlaubt dem Benutzer auch Speichern, Aktualisierung und Entfernen Daten aus dem Cache.
NCache Details Holen Sie sich den Betrieb Atomare Operationen
Holen Sie sich Massenartikel aus dem Cache
In ähnlicher Weise können Sie auch Massenartikel aus dem Cache abrufen, indem Sie die verwenden GetBulk() Methode. Auf diese Weise können Sie mit einem einzigen Aufruf zahlreiche Elemente aus dem Cache abrufen.
Das folgende Beispiel zeigt, wie mehrere Kunden mit einem einzigen Vorgang aus dem Cache abgerufen werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Pre-condition: Items are already present in the cache // Create an array of all keys to fetch String[] keys = new String[] { "Customer:ALFKI", "Customer:ANATR", "Customer:ANTON", "Customer:AROUT", "Customer:BERGS" }; // Get items from cache IDictionary<string, Customer> retrievedItems = cache.GetBulk<Customer>(keys); // Retrieve customers and their addresses from dictionary foreach (KeyValuePair<string, Customer> retrievedItem in retrievedItems) { Console.WriteLine($"Customer: {retrievedItem.Value.ContactName}, Address : { retrievedItem.Value.Address}"); } |
Zusätzlich NCache bietet dem Benutzer an Speichern, Insert und Entfernen Massendaten in einem einzigen Aufruf.
NCache Details CRUD-Operationen Massenbetrieb
Elemente mithilfe von Schlüsselwörtern abrufen
Für eine effektive Suche können Sie Artikel auch mit Schlüsselwörtern abrufen, die ihnen zugeordnet sind. Sie markieren Ihre Daten mit bestimmten stringbasierten Schlüsselwörtern und rufen die Artikel mit Hilfe dieser Schlüsselwörter ab. Beispielsweise möchten Sie bestimmte Kunden nach der Region gruppieren, zu der sie gehören, z. B. Ostküste oder Westküste. Der bestimmte Funktionsumfang, der von bereitgestellt wird NCache hierfür gilt:
Benannte Tags | Schlüsselwörter | Groups |
---|---|---|
Zur Verfügung gestellt in Form eines Wörterbuchs | Wird in Form eines Arrays von Tags bereitgestellt | Wird in Form einer Zeichenfolge bereitgestellt |
Kann einen beliebigen primitiven Datentyp haben | Nur String-basiert | Nur String-basiert |
Im unten angegebenen Beispiel möchte der Benutzer mithilfe einer SQL-Abfrage Details aller Kunden mit 12 % VIP-Mitgliedschaftsrabatt anzeigen.
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 27 28 29 30 31 |
// Pre-conditions: Items are already present in the cache with named tags // Custom class is query indexed through NCache Web Manager or config.ncconf // Create SQL Query with the specified criteria // Make sure to use the Fully Qualified Name for custom class string query = "SELECT CustomerID, ContactName FROM Alachisoft.NCache.Samples.Data.Customer WHERE VIP_Membership_Discount = 0.12"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Executing Query ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Read results if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set string customerID = reader.GetValue<string>("CustomerID"); string customerName = reader.GetValue<string>("ContactName"); Console.WriteLine($"Customer '{customerName}' with ID '{customerID}' has VIP membership discount."); } } else { Console.WriteLine($"No VIP members found"); } |
Informationen zu anderen Vorgängen, die benannte Tags verwenden, finden Sie unter NCache Docs.
NCache Details ICacheReader Durchsuchen Sie Cache-Daten mit benannten Tags
Cache mit SQL durchsuchen
Zum Abrufen von Elementen aus einer bestimmten Datenbank sind Abfragen eine effektive Möglichkeit, mit bestimmten Kriterien zu suchen. NCache versteht vollständig die Notwendigkeit von Abfragen, mit denen Sie Elemente aus dem Cache abrufen können SQL-ähnlich Abfragen. Außerdem müssen Sie Index das jeweilige Element im Cache, da es im Gegensatz zur Datenbank keine eigenen Indizes erstellt. Aber Sie können mit der SQL-Abfrage fortfahren, sobald die Daten indiziert sind.
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).
Im Folgenden sind die Dinge aufgeführt, die in unterstützt werden NCache Anfragen:
- Grundlegende Abfrageoperatoren (=, ==, !=. LIKE, NOT LIKE)
- Logische Operatoren (UND, ODER, NICHT)
- Aggregatfunktionen (SUM, COUNT, AVG, MIN, MAX)
- Weitere Anwendungsbereiche
Sehen Sie sich den folgenden Code an, um zu sehen, wie SQL-ähnliche Abfragen den Cache durchsuchen. Das folgende Beispiel zeigt einen Benutzer, der den Filter angewendet hat, um nur die Produkte mit einem Stückpreis von weniger als 100 anzuzeigen.
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 27 28 29 30 31 32 33 |
//Pre-condition: Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT * FROM Alachisoft.NCache.Samples.Data.Product WHERE UnitPrice < ?"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("UnitPrice", 100.0); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Read results if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get key of product item in cache string productKey = reader.GetValue<string>("$KEY$"); // Get product attributes string productName = reader.GetValue<string>("ProductName"); double unitPrice = reader.GetValue<double>("UnitPrice"); Console.WriteLine($"Product '{productName}' with key '{productKey}' has UnitPrice {unitPrice}"); } } else { Console.WriteLine($"No product found with price less than 100"); } |
NCache Details SQL-unterstützte Operationen SQL-Abfrage
Durchsuchen Sie den Cache mit LINQ
Wie SQL, NCache bietet Unterstützung beim Schreiben von Abfragen in LINQ um den Cache zu durchsuchen. NCache LINQ-Anbieter konvertiert LINQ-bezogene Abfragen in NCacheim erweiterten SQL-Format und gibt die Ergebnisse entsprechend zurück, nachdem es in das LINQ-Format umgewandelt wurde. Es gibt zwei Arten von Syntax zum Schreiben von LINQ-Abfragen:
- Lambda-Ausdruck
- Einfacher LINQ-Abfrageausdruck
Genau wie bei SQL müssen Sie jedoch Indizes für die durchsuchbaren Cache-Daten definieren, damit Ihre Abfrage reibungslos ausgeführt werden kann.
Sehen Sie sich das folgende Codebeispiel an, um zu sehen, wie die LINQ-Abfrage ein Objekt aus dem Cache abruft. Der Benutzer hat den Filter angewendet, um entweder Getränke oder Milchprodukte mit mindestens 10 Einheiten auf Lager anzuzeigen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// Pre-condition: Items are already present in the cache // Create custom class LINQ object IQueryable<Product> products = new NCacheQuery<Product>(cache); // LINQ query to search cache IQueryable<Product> result = from prod in products where (prod.Category == "Beverages" || prod.Category == "Dairy") && prod.UnitsInStock > 10 select prod; if (result != null) { foreach (Product product in result) { Console.WriteLine($"Product '{product.ProductName}' in Category '{product.Category}' has stock of '{product.UnitsInStock}' units"); } } else { Console.WriteLine($"No product found"); } |
NCache Details LINQ-Abfrage LINQ-Basisoperatoren
Abschluss des Blogs
NCache Tatsächlich ist es eine leistungsstarke Caching-Lösung zur Steigerung der Leistung leseintensiver Anwendungen. Es erhöht die Geschwindigkeit und verbessert die Leistung, Skalierbarkeit und Zuverlässigkeit mit einer Vielzahl von Funktionen. Bitte schauen Sie sich andere an NCache Funktionen von unserer Website.