Synchroniser le cache avec SQL / NoSQL Databases

NCache est un cache distribué extrêmement rapide et linéairement évolutif qui vous permet de mettre en cache l'application pour améliorer les performances de votre application. Lorsque vous mettez en cache des données d'application, vous créez une copie des données dans le cache qui existe également dans votre base de données. Si ces données dans la base de données changent, vous voulez vous assurer que le cache est également mis à jour afin qu'il soit toujours cohérent avec la base de données.

Pour gérer cette situation, NCache fournit de puissantes fonctionnalités de synchronisation de base de données où le cache se synchronise lorsque les données changent en relationnel ou NoSQL database. La synchronisation signifie ici supprimer l'élément mis en cache correspondant du cache (ou le recharger avec la lecture continue). NCache fournit les éléments suivants pour la synchronisation de la base de données :

  1. Dépendance SQL
  2. Dépendance Oracle
  3. Cache de synchronisation avec Cosmos DB / MongoDB
  4. Dépendance OleDB
  5. Procédures CLR
  6. Rechargement automatique avec lecture

Le schéma suivant montre l'architecture de base de la façon dont NCache prend en charge la synchronisation de la base de données :

Synchronisation De La Base De Données

Dépendance SQL

Dépendance SQL est utilisé par NCache si votre base de données est SQL Server. Vous pouvez spécifier une SqlDependency pour tout élément mis en cache lorsque vous l'ajoutez ou le mettez à jour dans le cache. SQL Server surveille l'ensemble de données pour tout ajout, mise à jour ou suppression et notifie NCache via les notifications SQL presque immédiatement après la mise à jour de la base de données. Ce sont des notifications de base de données qui sont transformées en événements .NET.

SqlDependency peut être l'un des éléments suivants :

  • Requête SQL paramétrée
  • Procédure stockée

Vous pouvez trouver plus de détails sur ce sujet dans le blog Cache de synchronisation avec SQL Server.

Utilisation d'une requête paramétrée

Voici comment vous pouvez utiliser SqlDependency dans votre code .NET avec des requêtes paramétrées dynamiques :

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);

Utilisation de procédures stockées

Voici comment utiliser SqlDependency dans votre code .NET avec des procédures stockées :

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

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

Dépendance Oracle

Dépendance Oracle est utilisé par NCache si votre base de données est Oracle 10g ou version ultérieure et s'exécute sous Windows ou Unix. Tout comme SqlDependency, vous pouvez spécifier OracleDependency pour tout élément mis en cache lorsque vous l'ajoutez ou le mettez à jour dans le cache.

OracleDependency peut être l'un des éléments suivants :

  • Requête SQL paramétrée
  • Procédure stockée

Oracle Server surveille ensuite cet ensemble de données pour tout ajout, mise à jour ou suppression et lorsque cela se produit, il avertit NCache via Oracle Notifications presque immédiatement après la mise à jour de la base de données. Ces notifications utilisent la communication client/serveur d'Oracle en dessous et parlent à NCache via .NET.

Utilisation de requêtes paramétrées

Voici comment vous pouvez utiliser OracleDependency dans votre code .NET avec des requêtes paramétrées dynamiques :

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

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

Utilisation de procédures stockées

Vous pouvez utiliser des appels de procédure stockée paramétrés dans la dépendance Oracle, comme illustré ici :

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

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

Cache de synchronisation avec Cosmos DB / MongoDB

NCache offre également plus de flexibilité et de contrôle sur la façon et le moment d'invoquer une dépendance sur un élément de cache. Dépendance de notification extensible vous permet d'implémenter votre logique personnalisée qui spécifie quand supprimer les données du cache. Vous pouvez écrire votre fournisseur personnalisé pour votre base de données sous-jacente comme Cosmos DB et MongoDB, et ce fournisseur est déployé sur le cache. Le cache vérifie ensuite toutes les dépendances déployées pour savoir si elles doivent être supprimées ou non.

Vous pouvez créer votre fournisseur personnalisé et le déployer sur le cache pour utiliser la dépendance personnalisée dans votre application. L'extrait de code suivant montre comment un fournisseur personnalisé déployé pour la synchronisation Cosmos DB peut être utilisé dans votre code .NET lors de l'ajout d'éléments au cache :

Customer customer = LoadCustomerFromDB(customerId);

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

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

Dépendance OleDB

Dépendance OleDB La dépendance OleDB est utilisée par NCache dans le cas où votre base de données n'est ni SQL Server ni Oracle mais est une base de données compatible OLEDB. Vous pouvez également utiliser DbDependency avec SQL Server et Oracle si vous ne souhaitez pas leurs notifications d'événements qui pourraient devenir bavardes au cas où vos données changeraient très rapidement.

Dans DbDependency, vous créez une table appelée ncache_db_sync dans la base de données qui contient une ligne pour chaque élément mis en cache avec DbDependency. Vous modifiez vos déclencheurs de base de données pour mettre à jour les lignes de cette table lorsque les données correspondantes dans la base de données changent. NCache interroge cette table pour les lignes mises à jour, donc dans un sondage, NCache récupère des milliers de lignes et les synchronise avec la base de données.

Voici comment vous pouvez utiliser DbDependency dans votre code .NET.

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

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

Procédures CLR

Lorsque vous avez un très grand nombre d'éléments dans le cache et qu'ils doivent tous être synchronisés avec la base de données, il est préférable d'écrire un Procédure CLR dans SQL Server sous Windows. Cette procédure CLR est appelée à partir de vos déclencheurs de base de données lorsque les données pertinentes changent. Cette procédure CLR rend alors asynchrone NCache Appels d'API pour ajouter, mettre à jour ou supprimer l'élément mis en cache correspondant du cache.

Voici un exemple de procédure CLR qui supprime l'objet s'il est mis à jour.

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

Rechargement automatique avec gestionnaire de lecture

Le comportement par défaut de la synchronisation de la base de données consiste à supprimer l'élément mis en cache de la base de données lorsque les données correspondantes dans la base de données changent. Cependant, il existe des situations où vous souhaitez simplement le mettre à jour avec la dernière version des données.

Pour répondre à ce besoin, NCache permet de combiner la synchronisation de la base de données avec la Lire à travers fonction de gestionnaire de NCache. Avec ça, NCache appelle simplement le gestionnaire de lecture pour recharger la dernière copie de l'élément mis en cache, puis met à jour le cache avec. Cette fonctionnalité offre la possibilité de synchroniser NCache avec toute relation ou NoSQL database qui a été configuré, y compris les éléments suivants (et plus) :

  1. SQL Server
  2. Oracle
  3. Base de données Cosmos
  4. MongoDB

L'extrait de code suivant montre comment les données peuvent être rechargées automatiquement en bloc dans NCache à partir de Cosmos DB à l'aide de la lecture directe. Vous pouvez également trouver plus de détails dans le blog Synchroniser le cache avec CosmosDB.

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

Que faire ensuite?

NCache Détails
Télécharger la clé d'installation gratuite de 30 jours
Demander une démo personnalisée en direct
Lire la documentation du produit
© Copyright Alachisoft 2002 - . Tous droits réservés. NCache est une marque déposée de Diyatech Corp.