Ein Freund von mir sagte, dass die Geschäftsführung seines Supermarkts darüber nachdenke, sich für eine zu entscheiden verteiltes Cache-System um die Leistung ihrer E-Commerce-Anwendung zu verbessern. Aber er war sich nicht sicher, ob dieser verteilte Cache ihnen die Möglichkeit dazu bieten würde Daten mit SQL durchsuchen. Der Grund dafür ist, dass die meisten ihrer Online-Shop-Funktionen von der Suche nach Daten abhängen und sie es sich nicht leisten können, ihre Anwendung neu zu schreiben. Und wenn alle ihre SQL-Abfragen immer noch an die Datenbank gehen, wird der Zweck der Verwendung eines verteilten Caches zunichte gemacht.
Wenn Sie mit einer ähnlichen Situation zu kämpfen haben und eine schnelle und zuverlässige Lösung für alle Ihre Leistungsprobleme benötigen, dann NCache ist genau das, was Sie brauchen. Lesen Sie weiter, um mehr zu erfahren.
NCache Details Herunterladen NCache Editionsvergleich
Cache als Datenspeicher
Wenn wir nun Daten in einem Cache speichern, um sie für eine schnellere Verwendung verfügbar zu machen, bleibt das Problem, das mein Freund erklärt hat, immer noch bestehen. Der Kunde möchte den Bestand abfragen, um nach den gewünschten Produkten zu suchen. Nun, ich habe gute Nachrichten für Sie (und ihn); NCache ist vollständig mit SQL ausgestattet, was Ihnen dies ermöglicht Abfragedaten in Ihrem Cache genauso wie in Ihrer Datenbank.
Abbildung 1: NCache Umgang mit der SQL-Abfragelast
Warte... warte! Löst das nicht plötzlich alle unsere Probleme? Wie in Abbildung 1 dargestellt, wird der gesamte Produktkatalog im Cache gespeichert, wir können SQL-Abfragen darauf implementieren und das Ergebnis direkt an die Anwendung zurückgeben – dies reduziert die Gesamtzahl der Fahrten zum Dataable erheblich und seitdem NCache ist skalierbar und zuverlässig und kann Hunderttausende Kunden gleichzeitig bedienen!
SQL-Abfrage in NCache – Kurzes Beispiel
Angenommen, ein Kunde hat die Produkt-ID eines Produkts, das er häufig konsumiert, beachten Sie die Abfrage unten, diese wird im Cache (nicht in der Datenbank) ausgeführt und das Ergebnis an die Anwendung gesendet.
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 |
// Pre-condition: Cache is already connected // Items are already present in the cache. // Provide Fully Qualified Name (FQN) of your custom class string query = "SELECT ProductName FROM FQN.Product WHERE ProductID > ?"; /// Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("ProductID",50000); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if the result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ProductName"); // Perform operations } } |
Die Sache ist, dass diese SQL-Abfragen im Cache sehr hilfreich sind, aber sie funktionieren schließlich innerhalb eines Caches; So…
Welche Art von Daten wird im Cache durchsucht?
NCache hat zwei große Kategorien, in denen Daten gespeichert werden. Dies sind Transaktionsdaten und Referenzdaten.
Transaktionsdaten
Transaktionsdaten sind Daten, die zur Erfüllung einer Anfrage als einzelne Einheit behandelt werden. Diese werden als Abfrageergebnisse aus der Datenbank gesammelt und in einem Cache gespeichert. Wenn der Kunde beispielsweise anhand der Tabelle aus der Datenbank nach allen Produkten fragt, die billiger als 5 US-Dollar sind, handelt es sich bei der resultierenden Ausgabe, die im Cache gespeichert wird, um Transaktionsdaten.
Abbildung 2: Produkttabelle in der Datenbank
1 |
SELECT * FROM Products WHERE UnitPrice <= 5.00 |
Abbildung 3: Im Cache gespeichertes Abfrageergebnis
Transaktionsdaten werden grundsätzlich zur Verarbeitung vorübergehend gespeichert. Es wird häufig aktualisiert und alte und unnötige Daten werden verworfen. SQL ist für ein einzelnes Objekt nicht erforderlich und Schlüsselsuchen werden stattdessen für Objektdaten verwendet. Transaktionsdaten sind bereits Abfrageergebnisdaten; Daher können darauf keine SQL-Abfragen durchgeführt werden.
Vergleichsdaten
NCache ermöglicht es Ihnen, große Datenmengen über längere Zeiträume im Cache zu speichern. Diese Art von Daten werden als Referenzdaten bezeichnet. Referenzdaten werden in strukturierter und relationaler Form gespeichert, regelmäßig aktualisiert und mit der Datenbank synchronisiert. Aus diesen Gründen ist es möglich, SQL-Abfragen für diese Daten im verteilten Cache zu implementieren.
Mit der Umsetzung von NCacheDie meisten Abfragen des Kunden werden im Cache ausgeführt und die Ergebnisse werden sofort zurückgegeben. Dadurch wird die Anzahl der Zugriffe auf den Cache erheblich reduziert, wodurch übermäßige Zugriffe auf die Datenbank vermieden werden, wodurch alle Leistungsengpässe beseitigt werden.
NCache Details SQL-Syntax in NCache NCache SQL-Dokumente
SQL-Funktionen in NCache
NCache bietet eine breite Palette von SQL-Funktionen und Operatoren, mit denen Sie Daten im Cache suchen und löschen können. Bitte beachten Sie, dass die von bereitgestellte SQL-Erweiterung NCache unterstützt keine Befehle zum Einfügen und Aktualisieren. Diese Befehle werden direkt in der Datenbank implementiert.
Werfen wir einen Blick auf einige der einzigartigen In-Memory-SQL-Funktionen, die von bereitgestellt werden NCache.
Verwendung von SQL-Platzhaltern in NCache
NCache Bietet flexible Suche mit zwei unterschiedlichen Platzhaltern in der SQL-Funktion LIKE. Diese sind '?' Und '*'
„?“ wird verwendet, wenn vor Ihnen ein Zeichen gesucht werden muss. Zum Beispiel „shar?“. Dadurch wird der Cache durchsucht und kann zu „Share“, „Sharp“ oder einem anderen ähnlichen Ergebnis führen.
„*“ wird verwendet, wenn vor der Suche null bis eine beliebige Anzahl von Zeichen stehen können. „cha*“ könnte beispielsweise „char“, „character“, „chair“ oder ein anderes ähnliches Ergebnis ergeben.
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 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT * FROM FQN.Product WHERE ProductName LIKE ? AND Category LIKE ?"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("ProductName", "Cha?"); queryCommand.Parameters.Add("Category", "Edib*"); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ProductID"); // Perform operations } } |
Verwenden von SQL-Aggregatfunktionen in NCache
Aggregierte Funktionen werden in SQL verwendet, um arithmetische Operationen für mehrere Werte auszuführen und einen singulären Wert zurückzugeben. NCache verwendet diese Aggregatfunktionen, um Vorgänge für zwischengespeicherte Datenelemente auszuführen.
Einige der von unterstützten Aggregatfunktionen NCache sind:
SUMME, ANZAHL, AVG, MIN, MAX
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT COUNT(*) FROM FQN.Products WHERE UnitPrice > 5"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set int result = reader.GetValue(1); } } |
Verwenden von SQL GROUP BY in NCache
NCache ermöglicht es Ihnen, Daten nach Ihren angegebenen Kriterien zu gruppieren GRUPPIERE NACH Funktion. Es gibt jedoch einen Haken: Sie können Group-By nur in Abfragen verwenden, die eine der oben genannten Aggregatfunktionen enthalten. Zum Beispiel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT Category, COUNT(*) FROM FQN.Products WHERE UnitPrice > 5 Group By Category"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set int result = reader.GetValue(1); string category = reader.GetValue(0); } } |
Gründe NCache ist eine gute Wahl für .NET-Apps
Kommen wir zurück zu unserem Superstore-Problem. Mit der Umsetzung von NCache B. zum Speichern des Produktkatalogs und zum Implementieren von SQL-Abfragen darauf, gibt es jetzt eine deutliche Reduzierung der kostspieligen Fahrten, die die Anwendung zur Datenbank unternehmen muss, um Abfragen durchzuführen und Daten abzurufen.
Hier sind einige der anderen Vorteile von NCache die damit einhergehen:
- Kein zusätzlicher Code: Da die meisten Abfragen im Cache erfolgen, muss kein zusätzlicher Code geschrieben werden, um jedes Mal auf die Datenbank zuzugreifen.
- 100 % natives .NET und .NET core: NCache ist ein 100 % natives .NET und .NET core Verteilter Cache, mit dem Sie Ihre Daten im Gegensatz zu anderen verteilten Caches und Datenspeichern in zuverlässiger Form speichern, verwalten und abfragen können.
- Geringere Bandbreitenkosten: Abfragen werden an den zwischengespeicherten Daten durchgeführt und an die Anwendung zurückgegeben, was viel Zeit und Bandbreitenkosten spart.
- Extrem schnell und zuverlässig: NCache ist ein extrem schneller und skalierbarer verteilter Cache, der speziell für Ihr .NET und entwickelt wurde .NET core Anwendungen. Besuche die NCache Maßstab von zwei Millionen Transaktionen pro Sekunde.
Wie Sie sehen, handelt es sich also um eine absolute Win-Win-Situation!
Gehen Sie zu NCache Dokumente, um mehr darüber zu erfahren, wie Sie SQL in Ihrem verteilten Cache-Datenspeicher verwenden können.