Wir alle kennen Situationen, in denen wir eine Ewigkeit warten müssen, um eine Antwort von der Datenbank als Gegenleistung für die generierten Anfragen am Anwendungsserver zu erhalten. Für geschäftskritische Anwendungen sind Latenz und Reaktionsverzögerung nicht tolerierbar. Hier entsteht der Bedarf an einer optimierten Caching-Lösung.
Während Caches üblicherweise mit Schlüsselwertspeichern in Verbindung gebracht werden, NCache geht noch einen Schritt weiter, indem es Ihnen ermöglicht, Daten zu Nicht-Schlüsselattributen Ihrer Objekte abzufragen. Dies bedeutet, dass Sie auf Daten basierend auf einer Vielzahl von Eigenschaften zugreifen können, die über die bloßen Schlüssel hinausgehen. Dieser Ansatz bietet mehr Flexibilität und Effizienz beim Datenabruf und erleichtert die Analyse und Verwaltung Ihrer Daten.
Mit der Zeit wachsen die Daten im Cache, sodass Sie solche Funktionen in Caches benötigen, in denen Sie Abfragen für eine schnellere Such- und Abrufleistung generieren können. NCache ermöglicht Ihnen eine effiziente Abfrage Ihrer Daten bei der Suche.
Ultraschall NCache optimiert die Such- und Abrufleistung?
NCache optimiert seine Such- und Abrufleistung durch Indizierung, Projektionen, Chunk-Größe und Client-Cache. Durch das Zwischenspeichern der Ergebnisse von Abfragen im Speicher wird die Reaktionsfähigkeit auf Anfragen erheblich verbessert. Da viele Abfragen direkt aus dem Cache bedient werden, werden zusätzliche Datenbankreisen eingespart. NCache verwendet mehrere Möglichkeiten, um die Such- und Abrufleistung zu steigern, wie unten beschrieben.
1. Indizes strategisch erstellen
Für eine effiziente Datensuche auf Basis von Abfragen, NCache erfordert die Erstellung von Suchindizes. Im Gegensatz zu herkömmlichen Datenbanken, die ohne Indizes langsam sein und vollständige Speichersuchen durchführen können, um Daten zu finden, NCache priorisiert die Leistung und macht die Erstellung von Indizes obligatorisch. Durch das Erstellen von Indizes NCache kann den Datentyp und das Speicherformat bestimmen, die Ihren Suchanforderungen am besten entsprechen, und so sicherstellen, dass die Suche schnell und effizient ist
Aber, NCache verwendet Indizierung Da es sich um einen leistungsorientierten Ansatz handelt, muss das Indizieren der Attribute für eine Suche jedoch sehr sorgfältig durchgeführt werden, da es Speicherplatz benötigt, um einen Index beizubehalten, und das Indizieren unnötiger Attribute zu Speicher- und Leistungsmehraufwand führen kann.
NCache bietet zwei Möglichkeiten zum Definieren von Indizes.
• Vordefinierter Index (Statischer Index)
• Laufzeitindex (Dynamischer Index)
2. Verwenden Sie Projektionen intelligent
Wenn es um Rückfragen geht, Projektionen kann die Leistung Ihrer Anwendung erheblich verbessern. Basierend auf Ihrer Anfrage, NCache ermöglicht es Ihnen, alle indizierten Merkmale einer Klasse oder bestimmte Projektionen aus dem Cache-Speicher abzurufen.
Die richtigen NCache, können Sie die Spalten Ihrer Wahl angeben, die auf Ihre Abfrage projiziert werden sollen, um die Suche effizienter durchzuführen. Neben bestimmten Stützenprojektionen können Sie auch mehrere Projektionen abrufen. Unten erwähnt ist ein Beispiel, das Projekte $GROUP$
und $Value$
in einer einzigen Abfrage.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
string query = "SELECT $Value$, $Group$ FROM FQN.Product WHERE Productid > ?"; // Providing parameters for query queryCommand.Parameters.Add("ProductID",50000); // Check if the result set is not empty if (reader.FieldCount > 0) { while (reader. Read()) { Product value = reader.GetValue(1); string group Name = reader.GetValue(2); // Perform operations } } else { // Null query result set retrieved } |
Wenn Sie die Projektionen nicht angeben, wird standardmäßig das vollständige Objekt zusammen mit den indizierten Merkmalen auf Anfrage vom Server zum Client übertragen – dies ist langsamer als ausgewählte Daten. Unten erwähnt ist ein Beispiel, das alle Felder, die sich auf die Klasse Product beziehen, aus dem Cache über die abruft *
Betreiber.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
string query = "SELECT * FROM FQN.Product WHERE ProductID > ?"; // Providing parameters for query queryCommand.Parameters.Add("ProductID",50000); // Check if the result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ProductID"); // Perform operations } } else { // Null query result set retrieved } |
Es ist wichtig zu beachten, dass durch die Verwendung von Projektionen NCache reduziert die zusätzliche Arbeit zum Abrufen aller indizierten Merkmale des Objekts und ruft nur die gewünschten Spalten ab. NCache hilft Benutzern, die Leistung auf diese Weise zu verbessern, indem eine bessere Abfragesyntax ermöglicht wird.
3. Chunk-Größe / Abrufen von Daten in Chunks
NCache bietet eine weitere Funktion zur Abfrageoptimierung namens Chunk Size. Nach dem Ausführen einer Suchanfrage empfängt die Anwendung Daten-/Schlüsselpakete in Blöcken, wobei jeder Block eine bestimmte Größe von Daten-/Schlüsselpaketen darstellt. Es gibt mehrere Möglichkeiten, Daten abzufragen, unabhängig davon, ob Sie nur die Schlüssel oder ausgewählte Elemente oder einen vollständigen Satz von Eigenschaften eines Objekts – einen so genannten Datensatz – abfragen möchten.
Je größer die Ergebnismenge ist, desto langsamer wird sie als Antwort auf die generierte Abfrage abgerufen. Der Client, der die Daten konsumiert, anstatt die gesamte Ergebnismenge auf einmal abzurufen, konsumiert die Daten in Blöcken vom Server, einen nach dem anderen. NCache bringt die Daten standardmäßig in kleineren Blöcken vom Server zur Clientseite, führt die Datenblöcke zusammen und gibt die Daten an die Anwendung weiter.
Der Standardwert einer Chunk-Größe beträgt 512 KB, Benutzer können dies jedoch konfigurieren Stückgröße basierend auf ihren Anforderungen, während der Reader ausgeführt wird, um eine Suche im Cache basierend auf der angegebenen Abfrage durchzuführen. Da Daten in Form von Chunks über das Netzwerk reisen, verbessert dies die Leistung beim Suchen und Abrufen von Daten.
4. Client-Cache verwenden
NCache verfügt über eine vielseitige Funktion namens Client-Cache (L1-Cache). L1 ist eine Teilmenge des Hauptcaches, der sich näher an der Anwendung befindet, die sein kann InProc und, OutProc. Da es sich um eine Teilmenge des Hauptcaches (L2-Cache) handelt, werden Abfragen nicht mit dem L1-Cache ausgeführt. Nur schlüsselbasierte Operationen, wie z add
, get
, oder getbulk
Operationen werden ausgeführt, indem zuerst Schlüssel im L1-Cache gesucht werden und fehlende Schlüssel aus dem L2-Cache abgerufen, zusammengeführt und bereitgestellt werden.
Der L2-Cache enthält vollständige Daten, sodass Abfragen und Operationen, die von Tags ausgeführt werden, immer darauf ausgeführt werden. Anstatt eine Abfrage auszuführen, um alle Daten aus dem L2-Cache abzurufen, kann der Benutzer Schlüssel nur aus dem L2-Cache abrufen. Verwenden Sie dann Bulk Get, um diese Schlüssel aus dem L1-Cache abzurufen. Wenn Daten fehlen, werden sie aus dem L2-Cache bereitgestellt. Häufig durchgeführte Lese-/Schreiboperationen werden im Client-Cache gespeichert, was zu schnelleren Abrufzeiten für nachfolgende Anfragen für dieselben Daten führt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Executing query to fetch keys only ICacheReader reader = _cache.SearchService.ExecuteReader(queryCommand, false); // Check if the result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { //Populate Keys List keys.Add(reader.GetValue(0)); } } //Get Data using Bulk API. IDictionary<string, Product> productsList = _cache.GetBulk(keys); //If the number of keys is very large, you can break the list into multiple chunks and then do GetBulk for each chunk separately. |
NCache bietet eine Beispielanwendung zum effizienten Abrufen von Daten aus dem Client-Cache GitHub.
Zusammenfassung
In diesem Blog haben wir die verschiedenen Möglichkeiten behandelt NCache verwendet, um die Abfragesuch- und Datenabrufleistung zu verbessern. NCache erhöht nicht nur die Anwendungsleistung, sondern gewährleistet auch eine hohe Verfügbarkeit und Skalierbarkeit, um der Benutzerlast gerecht zu werden. Also ohne weitere Wartezeit Herunterladen NCache jetzt und starten Sie Ihre kostenlose 60-Tage-Testversion!