NCache ist ein Schlüsselwertspeicher. Es ruft zwischengespeicherte Elemente schnell anhand ihres Schlüssels ab. Es kann aber auch zwischengespeicherte Einträge nach anderen Eigenschaften durchsuchen. Anstatt zwischengespeicherte Produkte nach ihrem Schlüssel zu durchsuchen, können wir sie beispielsweise auch nach Kategorie, Preisspanne und Gewicht durchsuchen. Lassen Sie uns lernen, wie man zwischengespeicherte Elemente indiziert, um sie durchsuchbar zu machen.
Suchen
Abgesehen von der Suche nach Gegenständen anhand ihres Schlüssels, mit NCache, können wir zwischengespeicherte Einträge mit einer SQL-ähnlichen Syntax abfragen. Wir können SELECT- und DELETE-Abfragen schreiben, um Einträge zu finden und zu löschen. NCache unterstützt keine INSERT- oder UPDATE-Abfragen. Wie bei einer Datenbank-SELECT-Abfrage können wir Projektionen, ganze zwischengespeicherte Objekte oder nur Schlüssel abrufen. Auch, NCache unterstützt grundlegende Abfrage- und logische Operatoren und Aggregatfunktionen.
Wenn wir beispielsweise Produkte speichern, können wir eine Abfrage wie SELECT FROM Product WHERE UnitPrice <= 5.00` schreiben, um alle zwischengespeicherten Produkte mit Preisen unter 5 zu finden. Weitere Beispiele für die Suche nach Artikeln und die Verwendung von Operatoren und Aggregatfunktionen , überprüfen Sie mit SQL-Abfragen mit verteiltem Cache.
Indizierung
Im Gegensatz zu relationalen Datenbanken, um Elemente nach anderen Attributen zu finden, NCache erfordert Indizes. Andernfalls müsste der gesamte Cache gescannt werden, um Elemente und die zugehörigen Eigenschaften zu finden. Es wird machen NCache langsam. Mit Indizes sind unsere Suchvorgänge schneller. Um eine Eigenschaft eines Objekts in einer SQL-ähnlichen Suchabfrage zu verwenden, müssen wir sie zuerst indizieren. Wir können alle öffentlichen, privaten und geschützten primitiven Felder und Eigenschaften eines Objekts indizieren. Beachten Sie, dass wir keine Felder oder Eigenschaften vom Referenztyp indizieren können. Einmal NCache Fügt ein Element zu einem Index hinzu, wird es als Ergebnis einer Abfrage zurückgegeben, wenn es die Kriterien unserer Suchanfragen erfüllt.
Es gibt zwei Mechanismen zum Definieren von Indizes NCache: statische und dynamische Indizierung.
Statische Indizierung
Um nach benutzerdefinierten Objekten zu suchen, müssen wir sie zuerst indizieren. Wir können Indizes entweder über Konfigurationsänderungen oder programmgesteuert definieren.
Indizes über Konfiguration anlegen
Wir können Indizes mit dem erstellen NCache Manager oder ein Powershell-Cmdlet. Zuerst sollten wir unseren Cache stoppen, unsere Indizes erstellen und ihn neu starten. Der NCache Der Manager fordert uns auf, die Assembly mit unseren Klassen hochzuladen und auszuwählen, welche Eigenschaften und Felder indiziert werden sollen. Danach, NCache indexiert automatisch neue Einträge. Für weitere Einzelheiten über die NCache Manager und Powershell Add-QueryIndex
Cmdlet, prüfen Abfrageindizes konfigurieren.
Programmgesteuertes Erstellen von Indizes
Um Indizes programmgesteuert zu erstellen, müssen wir die Felder unserer Objekte kommentieren, um sie zu indizieren. NCache hat der QueryIndexed
-Attribut, um Felder und Eigenschaften zu indizieren.
Um beispielsweise einen Produktnamen und einen Stückpreis zu indizieren, müssen wir ihn kommentieren Name
und UnitPrice
Eigenschaften. So was,
1 2 3 4 5 6 7 8 9 10 11 |
public class Product { public int ID { get; set } [QueryIndexed] public string Name { get; set } [QueryIndexed] public decimal UnitPrice { get; set } public decimal Weight { get; set } } |
Standardmäßig NCache benennt Indizes nach den annotierten Eigenschaften. Aber wir können mit dem einen anderen Namen angeben QueryIndexed
Attribut. Diese Funktion ist hilfreich, wenn Sie mit zwei Clientanwendungen arbeiten, die unterschiedliche Namen für die Eigenschaft verwenden, die wir indizieren möchten. Zum Beispiel, wenn eine Anwendung verwendet UnitPrice
und ein anderer, pricePerUnit
; wir können benutzen price
als Indexname in beiden Anwendungen und schreiben unsere SQL-ähnlichen Suchanfragen mit price
stattdessen.
Neben dem Annotieren einzelner Eigenschaften können wir Klassen mit annotieren QueryIndexable
Attribut. Hier entlang, NCache indiziert automatisch alle öffentlichen Eigenschaften und Felder. Aber wir müssen private Felder mit annotieren QueryIndexed
. Und wenn wir einige Eigenschaften nicht indizieren wollen, müssen wir sie mit kommentieren NonQueryIndexed
. Lassen Sie uns eine Klasse nur indizieren, wenn wir alle Eigenschaften indizieren müssen. Aber lassen Sie uns den Ansatz übernehmen, nur Eigenschaften zu indizieren, die wir für die Suche benötigen, da das Hinzufügen zu vieler Indizes einen Speicher- und Leistungsaufwand verursacht.
Zum Beispiel, um alle Eigenschaften eines Produkts zu indizieren, ausgenommen Weight
, müssen wir die Klasse und die annotieren Weight
Eigentum. So was,
1 2 3 4 5 6 7 8 9 10 11 12 |
[QueryIndexable] public class Product { public int ID { get; set } public string Name { get; set } public decimal UnitPrice { get; set } [NonQueryIndexed] public decimal Weight { get; set } } |
Weitere Einzelheiten zu Indexanmerkungen finden Sie unter Indizes programmgesteuert definieren.
Dynamische Indizierung
Wir definieren einige Attribute unserer zwischengespeicherten Einträge zur Laufzeit mithilfe von NCache Klient. Wir können keine Anmerkungen verwenden, um diese Attribute zu indizieren. Für Laufzeitattribute NCache verwendet dynamische Indizierung. Es gibt drei Arten von dynamischen Indizes: Gruppen-, Tag- und benannte Tag-Indizes.
Gruppenindex
Mit Gruppen können wir unsere Einträge aus Effizienzgründen logisch partitionieren. Gruppen funktionieren wie logische Kategorien. Beispielsweise können wir Gruppen für unsere „wichtigsten Kunden“ und „häufig gekauften Produkte“ verwenden. Wir können alle Einträge abrufen und entfernen, die derselben Gruppe angehören. Außerdem können wir mithilfe von Gruppen SQL-ähnliche SELECT-Abfragen schreiben. NCache automatisch Gruppen indiziert. Wenn wir einer nicht existierenden Gruppe einen Eintrag hinzufügen, NCache erstellt einen Index für die Gruppe und speichert alle Einträge, die zu einer Gruppe gehören, im selben Index. Weitere Informationen zu Gruppen finden Sie unter Gruppen-Cache-Daten: Ein Überblick.
Tag-Index
Tags sind Zeichenfolgekennungen, die wir unseren Einträgen zuordnen. Mit Tags können wir unsere Daten besser organisieren, da wir Einträge basierend auf ihren Tags abrufen und entfernen können. Im Gegensatz zu Gruppen können wir unseren Cache-Einträgen ein oder mehrere Tags zuordnen. Beispielsweise können wir unsere Kunden anhand ihres Standorts kategorisieren, indem wir „Kunden an der Ostküste“ und „Kunden an der Westküste“ als Tags verwenden. NCache unterstützt das Suchen und Löschen von Einträgen anhand eines Tag-Namens oder der SQL-ähnlichen Abfragesyntax. Wir können alle Artikel finden, die ein oder mehrere Tags enthalten, zum Beispiel: für jedes neue Tag, NCache erstellt einen Tag-Index und speichert alle zugehörigen zwischengespeicherten Elemente mit diesem Index.
Benannter Tag-Index
Benannte Tags sind erweiterte Tags. Im Gegensatz zu Gruppen und Tags, die nur Zeichenfolgen als Identifikatoren unterstützen, können wir mit Named Tags unseren Einträgen primitive Datentypen, Zeichenfolgen und Daten zuordnen. Benannte Tags sind eine Liste von Schlüssel-Wert-Paaren, die zur Laufzeit an unsere Einträge angehängt werden.
Beispielsweise können wir Named Tags verwenden, um den Rabatt zu speichern, den wir wiederkehrenden Kunden gewähren.
Um Einträge mit Tag-Namen oder der SQL-ähnlichen Syntax zu suchen und zu löschen, NCache erstellt automatisch einen Index, wenn wir Einträge mit benannten Tags hinzufügen, die nicht existieren. Auch, NCache speichert alle zugehörigen zwischengespeicherten Elemente in diesem Index. Da Named-Tag-Indizes nicht nur Zeichenfolgen, sondern alle primitiven Typen unterstützen, haben wir die Alternative, nach Elementen mit einem breiteren Spektrum an Datentypen zu suchen.
Um mehr über Tags und benannte Tags zu erfahren, überprüfen Sie die Tag-Cache-Daten und Benannte Tags mit Cache-Daten Führer.
Zusammenfassung
Dank Indizes und verteilten Abfragen NCache bietet Echtzeit-Suchfunktionen mit einer SQL-ähnlichen Syntax. Ohne Indizes, NCache müssten den gesamten Cache scannen, um unsere Einträge zu finden. Deshalb NCache braucht Indizes. Erinnern wir uns, dass wir zuerst alle durchsuchbaren Attribute unserer Artikel indizieren müssen. Wir können unsere Indizes per Konfiguration, programmgesteuert oder mit einer Kombination aus beiden Ansätzen definieren. Und lassen Sie uns nur die Eigenschaften indizieren, die wir in unseren Abfragen benötigen. Indizes haben Speicher- und Leistungskosten.
Weitere Einzelheiten zum Erstellen von Indizes und zur Funktionsweise von SQL-Abfragen finden Sie in der Leitfaden zur Indizierung und SQL-Abfrage: Überblick über Verhalten und Verwendung.