Cache mit SQL synchronisieren / NoSQL Databases

NCache ist ein extrem schneller und linear skalierbarer verteilter Cache, mit dem Sie Anwendungen zwischenspeichern können, um Ihre Anwendungsleistung zu verbessern. Wenn Sie Anwendungsdaten zwischenspeichern, erstellen Sie eine Kopie der Daten im Cache, die auch in Ihrer Datenbank vorhanden ist. Wenn sich diese Daten in der Datenbank ändern, möchten Sie sicherstellen, dass der Cache ebenfalls aktualisiert wird, damit er immer mit der Datenbank konsistent ist.

Um mit dieser Situation umzugehen, NCache bietet leistungsstarke Datenbanksynchronisierungsfunktionen, bei denen sich der Cache selbst synchronisiert, wenn sich Daten in relationaler oder relationaler Form ändern NoSQL database. Synchronisierung bedeutet hier, das entsprechende zwischengespeicherte Element aus dem Cache zu entfernen (oder es mit Durchlesen neu zu laden). NCache bietet Folgendes für die Datenbanksynchronisierung:

  1. SQL-Abhängigkeit
  2. OracleAbhängigkeit
  3. Cache mit Cosmos DB/MongoDB synchronisieren
  4. OleDB-Abhängigkeit
  5. CLR-Prozeduren
  6. Automatisches Neuladen mit Read-Through

Das folgende Diagramm zeigt die grundlegende Architektur von how NCache unterstützt die Datenbanksynchronisation:

Datenbank Synchronisierung

SQL-Abhängigkeit

SQL-Abhängigkeit wird verwendet von NCache falls Ihre Datenbank SQL Server ist. Sie können eine SqlDependency für jedes zwischengespeicherte Element angeben, wenn Sie es im Cache hinzufügen oder aktualisieren. SQL Server überwacht das Dataset auf Hinzufügungen, Aktualisierungen oder Entfernungen und benachrichtigt es NCache durch SQL-Benachrichtigungen fast unmittelbar nach der Datenbankaktualisierung. Dies sind Datenbankbenachrichtigungen, die in .NET-Ereignisse umgewandelt werden.

SqlDependency kann eine der folgenden sein:

  • Parametrisierte SQL-Abfrage
  • Gespeicherte Prozedur

Mehr Details zu diesem Thema finden Sie im Blog Cache mit SQL Server synchronisieren.

Parametrisierte Abfrage verwenden

So können Sie SqlDependency in Ihrem .NET-Code mit dynamischen parametrisierten Abfragen verwenden:

string connString = ConfigurationManager.AppSettings["connectionString"];
string query = "SELECT ProductID, ProductName, UnitPrice FROM Products WHERE ProductID > @productID";
...
var param = new SqlCmdParams();
...
sqlCmdParam.Add("@productID", param);

SqlCacheDependency sqlDepenency = new SqlCacheDependency(connString, query, SqlCommandType.Text, sqlCmdParam);

Gespeicherte Prozeduren verwenden

So können Sie SqlDependency in Ihrem .NET-Code mit gespeicherten Prozeduren verwenden:

...
var param = new SqlCmdParams();
...
sqlCmdParam.Add("productID", param);

SqlCacheDependency sqlDependency = new SqlCacheDependency(connString, "sp_GetProductByID", SqlCommandType.StoredProcedure, sqlCmdParams);

Oracle-Abhängigkeit

OracleAbhängigkeit wird verwendet von NCache falls Ihre Datenbank Oracle 10g oder höher ist und entweder unter Windows oder Unix läuft. Genau wie bei SqlDependency können Sie OracleDependency für jedes zwischengespeicherte Element angeben, wenn Sie es im Cache hinzufügen oder aktualisieren.

OracleDependency kann eine der folgenden sein:

  • Parametrisierte SQL-Abfrage
  • Gespeicherte Prozedur

Oracle Server überwacht diesen Datensatz dann auf Hinzufügungen, Aktualisierungen oder Entfernungen und benachrichtigt ihn, wenn dies geschieht NCache durch Oracle-Benachrichtigungen fast unmittelbar nach der Datenbankaktualisierung. Diese Benachrichtigungen verwenden die darunter liegende Client/Server-Kommunikation von Oracle und sprechen mit NCache über .NET.

Verwenden parametrisierter Abfragen

So können Sie OracleDependency in Ihrem .NET-Code mit dynamischen parametrisierten Abfragen verwenden:

...
var param = new OracleCmdParams();
. . .
oracleParam.Add("productID", param);

OracleCacheDependency oracleDepenency = new OracleCacheDependency(connString, query, OracleCommandType.Text, oracleParam);

Gespeicherte Prozeduren verwenden

Sie können parametrisierte gespeicherte Prozeduraufrufe in Oracle-Abhängigkeit wie hier gezeigt verwenden:

...
OracleCmdParams param = new OracleCmdParams();
. . .
oracleParam.Add("productID", param);

OracleCacheDependency oracleDependency = new OracleCacheDependency(connString, "sp_GetProductByID", OracleCommandType.StoredProcedure, oracleParam);

Cache mit Cosmos DB/MongoDB synchronisieren

NCache bietet auch mehr Flexibilität und Kontrolle darüber, wie und wann eine Abhängigkeit von einem Cache-Element aufgerufen werden soll. Erweiterbare Benachrichtigungsabhängigkeit ermöglicht es Ihnen, Ihre benutzerdefinierte Logik zu implementieren, die angibt, wann Daten aus dem Cache entfernt werden sollen. Sie können Ihren benutzerdefinierten Anbieter für Ihre zugrunde liegende Datenbank wie Cosmos DB und MongoDB schreiben, und dieser Anbieter wird im Cache bereitgestellt. Der Cache überprüft dann alle bereitgestellten Abhängigkeiten, ob sie entfernt werden müssen oder nicht.

Sie können Ihren benutzerdefinierten Anbieter erstellen und im Cache bereitstellen, um benutzerdefinierte Abhängigkeiten in Ihrer Anwendung zu verwenden. Der folgende Codeausschnitt zeigt, wie ein bereitgestellter benutzerdefinierter Anbieter für die Cosmos DB-Synchronisierung in Ihrem .NET-Code verwendet werden kann, während Elemente zum Cache hinzugefügt werden:

Customer customer = LoadCustomerFromDB(customerId);

CacheDependency cosmosDbDependency = new CosmosDbNotificationDependency<Customer>(. . .) ;

var cacheItem = new CacheItem(customer);
cacheItem.Dependency = cosmosDbDependency;
cache.Insert("Customer:" + customer.Id, cacheItem);

OleDB-Abhängigkeit

OleDB-Abhängigkeit OleDB-Abhängigkeit wird verwendet von NCache für den Fall, dass Ihre Datenbank weder SQL Server noch Oracle ist, sondern eine OLEDB-kompatible Datenbank. Sie können DbDependency auch mit SQL Server und Oracle verwenden, wenn Sie deren Ereignisbenachrichtigungen nicht möchten, die bei sehr schnellen Datenänderungen zu Gesprächen führen könnten.

In DbDependency erstellen Sie eine Tabelle mit dem Namen ncache_db_sync in der Datenbank, die eine Zeile für jedes zwischengespeicherte Element mit DbDependency enthält. Sie ändern Ihre Datenbank-Trigger, um Zeilen in dieser Tabelle zu aktualisieren, wenn sich die entsprechenden Daten in der Datenbank ändern. NCache fragt diese Tabelle nach aktualisierten Zeilen ab, also in einer Abfrage, NCache ruft Tausende von Zeilen ab und synchronisiert sie mit der Datenbank.

So können Sie DbDependency in Ihrem .NET-Code verwenden.

DBCacheDependency oledbDependency = DBDependencyFactory.CreateOleDbCacheDependency(connectionString, "PrimaryKey:dbo.Products");

var cacheItem = new CacheItem(product);
cacheItem.Dependency = oledbDependency;
cache.Insert(key, cacheItem);

CLR-Prozeduren

Wenn Sie eine sehr große Anzahl von Elementen im Cache haben und alle mit der Datenbank synchronisiert werden müssen, ist es viel besser, eine zu schreiben CLR-Verfahren in SQL Server unter Windows. Diese CLR-Prozedur wird von Ihren Datenbank-Triggern aufgerufen, wenn sich die relevanten Daten ändern. Diese CLR-Prozedur macht dann asynchron NCache API-Aufrufe zum Hinzufügen, Aktualisieren oder Entfernen des entsprechenden zwischengespeicherten Elements aus dem Cache.

Hier ist ein Beispiel für eine CLR-Prozedur, die das Objekt entfernt, wenn es aktualisiert wird.

[Microsoft.SqlServer.Server.SqlProcedure]
public static void RemoveOnUpdate(string cacheName, string key)
{            
    cacheName = "demoClusteredCache";
    Cache cache = CacheManager.GetCache(cacheName);
    cache.RemoveAsync(key);
}

Automatisches Neuladen mit Read-Through-Handler

Das Standardverhalten der Datenbanksynchronisierung besteht darin, das zwischengespeicherte Element aus der Datenbank zu entfernen, wenn sich die entsprechenden Daten in der Datenbank ändern. Es gibt jedoch Situationen, in denen Sie es einfach mit der neuesten Version der Daten aktualisieren möchten.

Um diesem Bedarf gerecht zu werden, NCache ermöglicht es Ihnen, die Datenbanksynchronisierung mit der zu kombinieren Durchlesen Handler-Funktion von NCache. Mit diesem, NCache Ruft einfach den Read-Through-Handler auf, um die neueste Kopie des zwischengespeicherten Elements neu zu laden, und aktualisiert dann den Cache damit. Diese Funktion bietet die Flexibilität zum Synchronisieren NCache mit einem relationalen oder NoSQL database die konfiguriert wurde, einschließlich der folgenden (und mehr):

  1. SQL Server
  2. Oracle
  3. Kosmos DB
  4. MongoDB

Das folgende Code-Snippet zeigt, wie Daten in großen Mengen automatisch neu geladen werden können NCache von Cosmos DB mit Read-Through. Weitere Details finden Sie auch im Blog Cache mit CosmosDB synchronisieren.

public Task ProcessChangesAsync(IChangeFeedObserverContext context, IReadOnlyList docs, CancellationToken cancellationToken) 
{
    cacheItems = cache.GetBulk(DocsKeys, new ReadThruOptions {Mode = ReadMode.ReadThruForced} );
    return Task.CompletedTask;
}

Was macht man als nächstes?

NCache Details
Laden Sie den kostenlosen 30-Tage-Installationsschlüssel herunter
Fordern Sie eine personalisierte LIVE-Demo an
Lesen Sie die Produktdokumentation
© Copyright Alachisoft 2002 - Alle Rechte vorbehalten NCache ist eine eingetragene Marke der Diyatech Corp.