Jedes Unternehmen benötigt heutzutage Daten, um seinen Betrieb zu verwalten. Die beste Lösung zum Speichern einer gut organisierten Sammlung von Daten ist eine Datenbank. In ähnlicher Weise ist die am häufigsten verwendete Computersprache zum Speichern und Abrufen von Daten in Datenbanken SQL (Structured Query Language). In einer so schnelllebigen modernen Welt ist es entscheidend, Informationen schnell und effektiv zu finden.
NCache erfüllt diese Anforderung, indem der relevante Schlüssel angegeben wird, bei dem der Primärschlüssel zum Suchen von Daten verwendet wird. Zusätzlich, NCache beschäftigt auch Indizierung in vielen Modulen, um die Suchleistung im Cache zu verbessern und den Überblick zu behalten. Wie in realen Situationen benötigen Sie flexible Suchfunktionen, um Informationen mit anderen Kriterien als dem Primärschlüssel zu finden.
Alle durchsuchbaren Attribute sollten jedoch für die Suche indiziert werden. Der zusätzliche Rechenspeicher, der benötigt wird, um den Index zu speichern, sowie die Zeit, die für eine Aktualisierung benötigt wird, werden durch die Zeit ausgeglichen, die während des Informationsabrufs eingespart wird.
Möglichkeiten zum Definieren von Indizes
Um Indizes zu definieren, NCache bietet statisch und dynamisch Indizierung. In beiden Fällen müssen die Abfrageindizes für eine benutzerdefinierte Klasse vordefiniert werden, um im Cache nach Elementen dieser Klasse zu suchen. Auf diese Weise speichert der Cache Informationen so, dass sie einfach abgefragt werden können. Sie können statische Indizes durch angeben Konfiguration oder durch Definieren indexiert programmgesteuert. Laufzeitindizes erfordern keine Konfiguration, bevor sie verwendet werden.
Abfragen des Index programmgesteuert durch NCache
NCache bietet den Benutzern die Vielseitigkeit, Indizes mit verschiedenen Methoden zu erstellen. Sie können je nach Bedarf Indizes für bestimmte Felder oder die gesamte Klasse generieren. NCache ermöglicht es Ihnen, Abfrageindizes programmgesteuert unter Verwendung der folgenden Anmerkungen:
- QueryIndexable
- QueryIndexed
- QueryIndexed["Indexname"]
- NonQueryIndexed
Konfigurieren Sie den Abfrageindex für die Klasse
Mit dem Attribut QueryIndexable können Sie Ihre Klasse indizieren. Es wird auf Klassenebene definiert, um anzugeben, dass die gesamte Klasse indiziert werden kann. Alle öffentlichen Eigenschaften und Felder werden automatisch indiziert, wenn eine Klasse als QueryIndexable markiert ist. Wenn ein privates Feld in Ihrer Klasse indiziert werden muss, müssen Sie dies explizit mit der Annotation QueryIndexed angeben.
Das folgende Beispiel demonstriert die Indizierung der Felder der benannten Klasse Produkt mit dem QueryIndexable-Attribut. Dies wird indiziert ID, Name, Menge, Herstellername, und Stückpreis.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[QueryIndexable] class Product { public int ID { get; set; } public string Name { get; set; } public string Quantity { get; set; } public string ManufacturerName { get; set; } public Decimal UnitPrice { get; set; } } |
Die indizierten Objekte der Klasse werden dem Cache hinzugefügt. Das folgende Codebeispiel zeigt, wie Sie das Objekt von erhalten können Produkt oben erwähnte Klasse durch Abfrage.
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 |
// Pre-conditions: Cache is already connected // Products are already present in the cache // Provide Fully Qualified Name (FQN) of your Product class // Create a query string query = "SELECT $Value$ FROM FQN.Product WHERE Quantity < ?"; // Use QueryCommand for query execution QueryCommand queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("Quantity", 500); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Checking if the result set is not empty if (reader.FieldCount > 0) { // Getting all Products with Quantity less then 500 while (reader.Read()) { Product product = reader.GetValue<Product>(1); // Perform required operations } } else { // Null query result set retrieved } |
Nur wenn Sie alle oder die meisten Attribute oder Felder einer Klasse indizieren möchten, sollten Sie diese Strategie verwenden. Andernfalls wird davon abgeraten, da möglicherweise Merkmale indiziert werden, die nicht erforderlich sind, und am Ende zusätzlichen Speicher verbrauchen.
Konfigurieren Sie Abfrageindizes für eine bestimmte Eigenschaft
Wenn Sie nur wenige Eigenschaften oder Felder einer Klasse indizieren müssen, verwenden Sie QueryIndexed-Attribut da es Leistung und Speicherkosten spart. Um anzuzeigen, dass eine markierte Eigenschaft oder ein markiertes Feld indiziert werden kann, wird es auf der primitiven Eigenschafts- oder Feldebene definiert. Die Felder oder Attribute mit Anmerkungen werden automatisch indiziert.
Die Klasse Flug (Flight) Die unten gezeigte zeigt, wie die gewünschten Attribute mit QueryIndexed indiziert werden, ohne die gesamte Klasse zu indizieren. Nur für die Felder ID und TotalPassengers, NCache erstellt automatisch Indizes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Flight { [QueryIndexed] public int ID { get; set; } [QueryIndexed] public int TotalPassangers { get; set; } public string FlightType; private string DepartAirport { get; set; } public AirLine Airline { get; set; } } |
Wenn nur eine kleine Anzahl der Eigenschaften oder Felder in Ihrer Klasse indiziert werden muss, können Sie diese Methode verwenden, um Indizes zu erstellen. Sie haben die Möglichkeit, die gewünschten Eigenschaften oder Felder auszuwählen und nur diese zu indizieren. Diese Anmerkung erspart Ihnen das Speicherproblem, das sich aus der Abfrage der gesamten Klasse ergeben kann, während Sie nur einige Attribute daraus abfragen müssen.
Konfiguration des vom Benutzer bereitgestellten Abfrageindex
Da die Verwendung der QueryIndexed-Eigenschaft für die selektive Indizierung zu diesem Standardverhalten führt, ist der Indexname derselbe wie der Feldname. Durch die Annotation QueryIndexed("indexName"), NCache ermöglicht es Ihnen, eindeutige Namen für Ihre Felder oder Eigenschaften festzulegen, die indiziert werden. Wenn dies der Fall ist, wird ein Index unter Verwendung des benutzerdefinierten Namens aus dem Konstruktor erstellt. Beim Schreiben von Anwendungscode in mehreren Sprachen mit möglicherweise unterschiedlichen Feldnamen kann dies hilfreich sein.
In der Klasse Mitarbeiter, die Felder Mitarbeiter-ID, Geburtsdatum, und Gehalt werden indiziert, da sie mit dem Attribut QueryIndexed gekennzeichnet sind. Um jedoch einen Index zu erstellen, der die Felder umfasst, EmployeeId und DateOfBirth, benutzerdefinierter Name im Konstruktor "ICH WÜRDE" und „Geburtsdatum“ werden verwendet.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Employee { public string Name { get; set; } [QueryIndexed("ID")] public int EmployeeId { get; set; } [QueryIndexed("DOB")] public string DateOfBirth { get; set; } [QueryIndexed] public double Salary { get; set; } public string Position { get; set; } } |
Felder von der Indizierung ausschließen
Wenn Ihre Klasse indiziert ist, kann das NonQueryIndexed-Attribut verwendet werden, um die Indizierung optionaler Eigenschaften oder Felder zu stoppen. Wenn eine Klasse als QueryIndexable deklariert ist, wird das Attribut NonQueryIndexed wird auf der Ebene der primitiven Eigenschaft oder des Felds definiert, um anzugeben, dass die Eigenschaft oder das Feld nicht indiziert werden soll. Die öffentlichen Felder und Eigenschaften werden alle automatisch indiziert. Das NonQueryIndexed-Attribut gibt an, welche Felder nicht indiziert werden sollen.
Das folgende Beispiel zeigt, wie das Feld explizit deklariert wird Kundenname als NonQueryIndexed, während die Bestellung Klasse ist indiziert. Dadurch wird die Indizierung des annotierten Felds außer Acht gelassen.
1 2 3 4 5 6 7 8 9 10 11 12 |
[QueryIndexable] class Order { public int OrderId { get; set; } public DateTime OrderDate { get; set; } public string OrderDestination { get; set; } [NonQueryIndexed] public string CustomerName { get; set; } } |
Das Feld Kundenname wird nicht in den Cache eingefügt. Bei Abfrage erhalten Sie den Wert von Kundenname als null, während Sie alle anderen Felder explizit abrufen müssen.
Wenn bis auf wenige Eigenschaften alle indiziert werden müssen, können Sie QueryIndexable mit NonQueryIndexed kombinieren. Dies ist möglicherweise nützlich, wenn Sie über große Datenmengen verfügen und nur einen kleinen Teil ausschließen möchten, damit die Leistung intakt bleibt.
Zusammenfassung
NCache bietet einen schnellen und effizienten Mechanismus, mit dem Sie Ihren Index gemäß den festgelegten Kriterien abfragen können. Und mit dieser Funktion müssen Sie sich keine Gedanken über Speicherprobleme machen, die sich aus der Abfrageindizierung der gesamten Klasse ergeben könnten, da Sie nur einige ihrer Felder indizieren müssen. Zweifellos, NCacheDie verschiedenen Abfrageindex-Anmerkungen von sind ein wahrer Segen. Sie können andere überprüfen NCache Funktionen von unserer Website.