Titel: SQL-Abfrage: Übersicht über Verhalten und Verwendung Beschreibung: Erfahren Sie mehr über alle SQL-Abfrageoperatoren und -klauseln, die NCache unterstützt und welche Rolle sie bei der Cache-Verwaltung spielen.
kanonisch: https://www.alachisoft.com/resources/docs/ncache/prog-guide/sql-ncache.html
SQL-Abfrage: Überblick über Verhalten und Verwendung
NCache ist ein Schlüsselwert-Cache, in dem jedes neue Objekt mit einem eindeutigen Schlüssel gespeichert wird. Ähnlich wie bei einer relationalen Datenbank, in der der Primärschlüssel Daten findet, NCache können Sie diese Daten abrufen, indem Sie den entsprechenden Schlüssel angeben. Viele praktische Szenarien erfordern jedoch die Fähigkeit, flexibel zu suchen, um Daten basierend auf verschiedenen Attributen und nicht nur auf dem Primärschlüssel zu erfassen. Da die meisten hochtransaktionalen Anwendungen Daten im Cache speichern, ist die Möglichkeit, Daten abzufragen, sehr wünschenswert.
SQL-Abfrage: Bedeutung der Abfrage im Cache
Gehen Sie davon aus, dass es eine E-Commerce-Website gibt, auf der die Produkte anhand einer Reihe von Kriterien wie Kategorie, Preis, Gewicht usw. abgefragt werden. Um die Anwendungsleistung zu verbessern, scheint die Verwendung eines verteilten Caching-Systems eine geeignete Lösung zu sein. Der Verlust der Abfragefähigkeit oder das Umschreiben der Anwendung ist jedoch nicht akzeptabel.
In einem solchen Szenario NCache ist ein idealer verteilter Cache, der die Anwendungsleistung skalieren kann, ohne die Abfragefähigkeit zu beeinträchtigen. Speziell, NCache ermöglicht es Ihnen, zwischengespeicherte Daten abfragen basierend auf verschiedenen Attributen mit SQL-ähnlicher Abfragesyntax. Durch Anstellung NCache Für das zuvor erwähnte Szenario können Sie alle Produkte abfragen, indem Sie Kategorie, Preis oder Gewicht als Kriterien verwenden.
Note
NCache ermöglicht das Suchen und Löschen von Daten in einem Cache mithilfe einer SQL-ähnlichen Abfragesyntax.
NCache bietet die Flexibilität zum Abrufen Projektionen, das gesamte Objekt, nur die Cache-Schlüssel oder das Schlüssel-Wert-Paar selbst, je nach Ihren Anforderungen. Darüber hinaus, NCache unterstützt auch die grundlegende Abfrageoperatoren, logische Operatoren und Aggregatfunktionen von SQL bereitgestellt.
So funktioniert es
In NCacheAufgrund der Partitionierung werden die Daten auf verschiedene Clusterknoten verteilt. Bei tausenden Kunden kann die Suche nach einem Kunden anhand seiner ID recht einfach sein. Allerdings wäre die Suche nach einem von einer Million nicht so komplex, wenn die Datensätze über verschiedene Knoten verteilt sind und die Abfragekriterien ein beliebiges Kundenattribut sein können. In diesem Zusammenhang erfordert die Abfrage im Cache einen effizienten Datensuchmechanismus.
Bestimmtes, NCache beschäftigt Indizierung und verteilte Abfragen zur Unterstützung einer SQL-ähnlichen Echtzeit-Suchfunktion im Cache. Durch die Indizierung wird ein Attribut im Cache durchsuchbar. Sobald ein Element einem Index hinzugefügt wird, wird es als Abfrageergebnis auf dem Knoten zurückgegeben, mit dem der Client verbunden ist. Unterdessen wird eine Abfrage verteilt ausgeführt, wenn Daten in der partitionierten Topologie verteilt werden.
Wichtig
Ein Attribut muss indiziert werden, damit es im Cache durchsucht werden kann.
Indizierung
Herkömmliche Datenbanken verwenden die Indizierung, um die Abfrageleistung zu steigern. Jedoch, NCache verwendet Indizierung als obligatorisch, um die Suche in SQL-ähnlichen Abfragen zu ermöglichen. Um Cache-Daten abzufragen, müssen zunächst alle durchsuchbaren Attribute indiziert werden. Es ist wichtig zu beachten, dass die in Prognosen und Kriterien angegebenen Felder indiziert werden müssen. Sobald ein Index für ein Attribut definiert ist, werden alle relevanten, dem Cache hinzugefügten Daten automatisch indiziert und sind durchsuchbar. Daher ist es ausreichend, die Indizes einmal zu definieren.
Note
Lesevorgänge sind aufgrund der Indizierung viel schneller, aber jeder Schreibvorgang verursacht einen Overhead.
NCache verwendet die Indizierung, da es sich um einen leistungsorientierten Ansatz handelt. Durch die Indizierung entfällt die Notwendigkeit, jeden Eintrag im Cache abzufragen, während nach einem Abfrageergebnissatz gesucht wird. Dies beschleunigt den Suchmechanismus und spart Zeit und Rechenleistung.
Warnung
Indizieren Sie keine unnötigen Felder, da dies zu Speicher- und Performance-Overhead führen würde.
Verteilte Abfragen
Die Abfrage ausgeführt in NCache variiert je nach Cache-Topologie und der zugrunde liegenden Client-Konnektivität. Bei der gespiegelten oder replizierten Topologie wird die Abfrage nur auf dem Knoten ausgeführt, mit dem sich der Client verbindet. Dies tritt jedoch nicht auf, wenn Daten über die Clusterknoten partitioniert werden.
Die Abfragen über a partitionierter Cluster werden hauptsächlich aufgrund der Datenpartitionierung verteilt ausgeführt. Die Abfrage wird auf jedem Knoten einzeln ausgeführt, da der Client eine Verbindung zu allen Clusterknoten herstellt. Der aus den erforderlichen Daten bestehende Ergebnissatz wird von jedem Knoten zurückgegeben und zusammengeführt, bevor das Endergebnis an den Client zurückgegeben wird. Hier hängt die Leistung auch von der Anzahl der Clusterknoten und der Größe der von jedem Knoten zurückgegebenen Ergebnismenge ab.
Note
Die verteilte Abfrage in NCache ist hochgradig skalierbar.
Die verteilte Abfrage ergibt eine höhere Skalierbarkeit in NCache aufgrund der partitionierten Daten und ihrer parallelen Ausführung. Wenn neue Knoten dem Cluster beitreten, werden die partitionierten Daten für jedes Mitglied reduziert. Daher wird die von jedem Serverknoten benötigte Abfrageausführungszeit reduziert. Darüber hinaus reduziert sich auch der Netzwerkverkehr – aufgrund der gleichzeitigen Ausführung auf jedem Knoten.
SQL-Abfrage in NCache
NCache ermöglicht es Ihnen, Cache-Daten mit SQL-ähnlichen SELECT- bzw. DELETE-Abfragen zu suchen und zu löschen. INSERT- und UPDATE-Vorgänge werden derzeit nicht unterstützt. ExecuteReader wird zum Ausführen der SELECT-Abfrage im Cache verwendet und gibt die Ergebnismenge an eine Instanz von zurück ICacheReader. AusführenSkalar die Abfrage ausführt und die erste Spalte der ersten Zeile in der von der Abfrage zurückgegebenen Ergebnismenge zurückgibt, werden alle zusätzlichen Spalten oder Zeilen ignoriert.
AusführenNonQuery wird zum Löschen von Elementen aus dem Cache verwendet. Sie können alle primitiven Datentypen und Nullable-Typen abfragen, vorausgesetzt, dass Abfrageindizes definiert wurden.
Wichtig
Stellen Sie sicher, dass Sie die Instanz von schließen ICacheReader
nach der Ausführung, da es notwendig ist, die Ressourcen zu bereinigen.
Mit der Abfragesprache können Sie Nicht-Primärschlüsselkriterien angeben, je nachdem, welche Daten erforderlich sind. Sie können Abfragen ausführen, um Daten im Cache mithilfe verschiedener Projektionen und Kriterien abzufragen. Die in Projektionen und Kriterien angegebenen Attribute müssen jedoch indiziert werden. Darüber hinaus haben Sie je nach Anforderung die Flexibilität, nur die Cache-Schlüssel oder ganze Elemente abzurufen, die die angegebenen Abfragekriterien erfüllen.
Indizierungstypen
Wenn Sie ein Attribut im Cache abfragen möchten, sollte es zunächst indiziert werden. NCache bietet mehrere flexible Möglichkeiten für Indizierung. In Anbetracht der Notwendigkeit vordefinierter (statischer) Indizes, NCache können Sie Indizes für durchsuchbare Attribute im Voraus manuell definieren. Eine Möglichkeit, statische Indizes zu definieren, ist through Konfiguration. Alternativ können Sie auch Indizes programmgesteuert definieren.
Auf der anderen Seite, dynamische Indizes wie Gruppen, Tags und benannte Tags werden zur Laufzeit automatisch für ein Attribut erstellt. Mit Laufzeitindizes können Sie Daten im Cache basierend auf logischen Gruppen, Tags und benannten Tags abfragen.
Abfrage mithilfe von SQL-Projektionen
NCache ermöglicht es Ihnen, alle indizierten Attribute einer Klasse oder bestimmter Projektionen basierend auf Ihrer Abfrage aus dem Cache-Speicher abzurufen. NCache unterstützt verschiedene Projektionen um eine effiziente Suche zu ermöglichen. Projektionen spielen eine wichtige Rolle bei der Leistungssteigerung Ihrer Anwendung bei Abfragen. Beispielsweise möchten Sie nur die Spalte „Verfügbare Einheiten“ für Produkte in einer bestimmten Kategorie abrufen. In diesem Fall können Sie die folgende SELECT-Abfrage verwenden.
SELECT UnitsInStock FROM FQN.Product WHERE Category = "Sample_Category"
Note
Zur Leistungssteigerung ist es am besten, nur die wesentlichen Spalten abzufragen, da die Rückgabe des vollständigen Objekts kostspielig ist.
Es ist zu beachten, dass durch das Abrufen nur der gewünschten Spalten der zusätzliche Aufwand für das Abrufen aller indizierten Attribute der Spalten entsteht Product
Klasse wird vermieden. Auf diese Weise, NCache erleichtert den Benutzern das Erreichen einer verbesserten Leistung durch eine verbesserte Abfragesyntax.
Abfrage nach Schlüsseln und Objekten
Abhängig von Ihren Anforderungen können Sie mit Ihrer Abfrage nur die Cache-Schlüssel oder die zugehörigen Daten abrufen. Wenn Sie nur die Schlüssel aufzählen müssen, NCache ermöglicht Ihnen nur das Abrufen von Schlüsseln. Dies ist ein effizienter Ansatz, da die Größe der aus dem Cache abzurufenden Daten auf diese Weise erheblich reduziert wird. Daher können Sie es für eine verbesserte Leistung verwenden.
ExecuteReader
hat eine möglichkeit getData
, der nur für den Schlüsselabruf auf „false“ gesetzt ist. Standardmäßig ist der Wert true. Wenn Sie Daten zur Weiterverarbeitung benötigen, kann der Standardwert zur Abfrage von Objekten verwendet werden.
Unterstützte Abfrageoperatoren
Sie können eine Vielzahl von Operatoren verwenden, die von bereitgestellt werden NCache entsprechend Ihren erforderlichen Abfragekriterien, um die gewünschten Ergebnissätze aus Ihrem Cache abzurufen.
Die folgenden Operatorkategorien werden in unterstützt NCache Anfragen:
Kategorie | Operator |
---|---|
Grundlegende Abfrageoperatoren | = , == , != , <> , < , > , <=, >=, IN, LIKE , NOT LIKE |
Logische Operatoren | UND, ODER, NICHT |
Aggregierte Funktionen | SUMME, ANZAHL, AVG, MIN, MAX |
Weitere Anwendungsbereiche | GROUP BY, ORDER BY, DateTime.Now, DateTime ("jeder mit Datum und Uhrzeit kompatible String") |
Weitere Einzelheiten entnehmen Sie bitte der Abfrageoperatoren .
Client-Cache
NCache geht davon aus, dass Client-Cache (L1-Cache) enthält möglicherweise Teildaten. Da vollständige Daten im L1-Cache nicht garantiert sind, finden die Abfragen immer im Server-Cache (L2) statt NCache. Wenn der L1-Cache auf dem Client aktiviert ist, der die Abfrage ausführt, wird das Verhalten der Abfrageausführung nicht beeinflusst. Die Abfrage wird direkt im Servercache ausgeführt. Wenn sich jedoch Daten im gruppierten Cache aufgrund einer DELETE-Abfrage ändern, wird L1 mit dem L2-Cache synchronisiert.
Obwohl der Client-Cache die Abfrageausführung nicht beeinflusst in NCache, kann es eine wesentliche Rolle bei der Leistungssteigerung spielen. Sie möchten beispielsweise weitere Vorgänge für die Abfrageergebnismenge ausführen, aber das Abrufen der Daten aus dem Cache kann Ihre Anwendungsleistung beeinträchtigen. Wenn der Client-Cache mit einem L2-Cache konfiguriert ist, können Sie die gewünschten Daten mit einem einzelnen abrufen GetBulk
Anruf. Dies spart Zeit und vermeidet Leistungseinbußen, da die im Client-Cache ausgeführten Vorgänge im Vergleich zum L2-Cache viel schneller sind.