Verwenden von SQL-Abfragen mit verteiltem Cache

Autor: Iqbal Khan

NCache Ermöglicht die Erstellung eines verteilten Caches in der mittleren Ebene. So reduzieren Sie teure Datenbankzugriffe und verbessern die Anwendungsleistung deutlich. Die Skalierbarkeit wird verbessert, da häufig abgerufene Daten aus einem hoch skalierbaren Cache bereitgestellt werden, anstatt sich auf einen einzelnen Datenbankserver zu verlassen.

Ihre Anwendung verwendet typischerweise einen Cache als Hash-Tabelle, in der alles basierend auf einem Schlüssel gespeichert wird. Sie benötigen diesen Schlüssel, um ein Element abzurufen. Dies ist vergleichbar mit einer relationalen Datenbank, in der Sie Daten nur über den Primärschlüssel finden können. Obwohl diese Methode in vielen Fällen effektiv ist, erfordern komplexe Anwendungen in der Regel den Datenabruf basierend auf Attributen, die über den Primärschlüssel hinausgehen. Da Sie viele Ihrer Daten im Cache speichern, wäre es sehr nützlich, den Cache auch auf diese Weise durchsuchen zu können. NCache bietet genau eine solche Möglichkeit.

In diesem Artikel werde ich erläutern, wie SQL-Abfragen funktionieren in NCache.

Ausführen von SQL-Abfragen in NCache

NCache ermöglicht es Ihnen, query zwischengespeicherte Daten mit SQL-ähnliche SyntaxAnstatt sich ausschließlich auf Primärschlüssel zu verlassen, können Sie zwischengespeicherte Objekte anhand bestimmter Attribute wie Produkt-ID, Kategorie oder Preis filtern. Der folgende Code zeigt, wie Sie eine Cache-Abfrage in Ihrer .NET-Anwendung durchführen können.

// Precondition: Cache is already connected
// Items are already present in the cache
// Create a query that will be executed on the dataset
// Use the Fully Qualified Name (FQN) of your own custom class
string query = "SELECT * 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, false, 0);

// Check if the result set is not empty
if (reader.FieldCount > 0)
{
    while (reader.Read())
    {
        string result = reader.GetValue<string>(0);
        // Perform operations using the retrieved keys
    }
}
else
{
    // Null query result set retrieved
}

Der obige Code führt eine parametrisierte Abfrage im Cache aus, um Produkte mit einer ProductID größer als 50000 zu finden. Er verwendet einen QueryCommand, um die Abfrage und ihre Parameter zu übergeben, und ExecuteReader um passende Schlüssel über eine ICacheReaderDie Schleife liest jedes Ergebnis einzeln und ermöglicht so eine effiziente Iteration über übereinstimmende Einträge, ohne die gesamten Daten auf einmal zu laden. Wenn einzelne Objekte benötigt werden, ist ein separater Abrufvorgang mit jedem Schlüssel erforderlich.

Zusätzlich zum Abrufen, NCache ermöglicht Ihnen auch das Löschen zwischengespeicherter Daten mit SQL-ähnliches DELETE Abfragen. INSERT- und UPDATE-Operationen werden derzeit jedoch nicht unterstützt.

Indizierung durchsuchbarer Attribute

Bitte beachten Sie, dass NCache erfordert, dass alle durchsuchbaren Attribute indiziert werden. Denn ohne Indizierung NCache müsste den gesamten Cache durchsuchen, um die gesuchten Elemente zu finden. Und das ist ein sehr kostspieliger Vorgang, der den gesamten Cache verlangsamen und den Hauptgrund, warum Benutzer NCache, nämlich die Leistung und Skalierbarkeit ihrer Anwendungen zu steigern.

NCache bietet zwei Möglichkeiten zum Definieren dieser Indizes:

  1. Indizes definieren programmatisch.
  2. Einrichtung statische Indizes durch die NCache Managementzentrum.

Abfragen verschiedener Caching-Topologien

Obwohl das Suchverhalten aus Sicht der Client-Anwendung unabhängig von den verwendeten Caching-Topologien gleich ist, variiert das zugrunde liegende Suchverhalten von Topologie zu Topologie. Wenn Sie beispielsweise nach einem replizierten Cache suchen, wird Ihre Suche vollständig auf dem Cache-Server ausgeführt, von dem aus Sie die Suche gestartet haben. Dies liegt daran, dass dort der gesamte Cache verfügbar ist. So wird eine Abfrage in einem Replizierter Cache.

Abfrage läuft lokal auf einem Server
Abbildung 1: Abfrage läuft lokal auf einem Server

Wenn Sie jedoch eine haben Partitioniert or Partitionsreplikat In der Caching-Topologie werden die Daten auf alle Knoten im Cluster aufgeteilt. Dabei sendet der Cache-Server, von dem die Abfrage ausgeht, die Abfrage an alle anderen Server im Cluster und führt sie auch lokal aus. Die Abfrage wird dann auf allen Servern parallel ausgeführt, und ihre Ergebnisse werden von allen Knoten an den ursprünglichen Serverknoten zurückgegeben. Dieser Serverknoten führt dann alle Ergebnisse zusammen (führt eine „Union“ durch) und gibt sie an den Client zurück. Das folgende Diagramm veranschaulicht dies.

Die Abfrage wird auf allen Serverknoten parallel ausgeführt
Abbildung 2: Abfrage läuft parallel auf allen Serverknoten

Abfrage mithilfe von SQL-Projektionen

NCache ermöglicht es Ihnen, entweder alle indizierten Attribute einer Klasse oder nur bestimmte Projektionen aus dem Cache-Speicher mithilfe von SQL-ähnlichen Abfragen. Diese Projektionen unterstützen eine effiziente Suche und tragen maßgeblich zur Optimierung der Abfrageleistung bei. Wenn Sie beispielsweise nur die Spalte mit den verfügbaren Einheiten für Produkte innerhalb einer bestimmten Kategorie benötigen, können Sie eine Abfrage wie die folgende verwenden:

SELECT UnitsInStock FROM FQN.Product WHERE Category = "Sample_Category"

Indem Sie nur die benötigten Spalten auswählen, vermeiden Sie den Aufwand, alle indizierten Attribute der Klasse abzurufen. Dieser Ansatz verbessert die Abfrageausführung und trägt zur Aufrechterhaltung der Gesamtleistung bei. NCache um schnellere und effizientere Ergebnisse zu liefern.

Fazit

Wie du gesehen hast, NCache macht es sehr einfach, den verteilten Cache abzufragen. Dies ist eine leistungsstarke Funktion, mit der Sie Ihren Cache sinnvoller nutzen und Dinge leichter finden können.

Was macht man als nächstes?


Autor: Iqbal Khan arbeitet für Alachisoft , ein führendes Softwareunternehmen, das Lösungen für verteiltes .NET- und Java-Caching, O/R-Mapping und SharePoint-Speicheroptimierung anbietet. Sie erreichen ihn unter iqbal@alachisoft.com.

© Copyright Alachisoft 2002 - Alle Rechte vorbehalten NCache ist eine eingetragene Marke der Diyatech Corp.