La mise en cache des données fréquemment utilisées de votre application est une décision extrêmement compétente. Mais s'assurer que les données mises en cache restent synchronisées avec votre base de données Oracle est le dilemme. L'astuce pour surmonter cela est d'utiliser des expirations de données où vous devinez le TTL (Time To Live) de l'élément, puis de le mettre en cache.
Peu importe la popularité de ce schéma, cela reste une simple supposition éclairée sur la durée pendant laquelle cet élément restera inchangé dans la base de données. Et les suppositions ne sont pas toujours exactes. Si votre application est sensible aux données où la récupération et le traitement de données inexactes réfutent son objectif, l'utilisation de l'expiration vous coûtera très cher.
Ce qui vous sauve de cette situation difficile est d'utiliser un mécanisme de synchronisation de base de données dans votre cache tel que NCache, qui supprime automatiquement les données de cache correspondantes si elles sont mises à jour dans la base de données Oracle.
NCache Détails Dépendance du cache sur la base de données Techniques d'expiration des données
En utilisant NCache pour synchroniser avec Oracle Server
Oracle Dependency utilise des notifications d'événements qui notifient tous les clients de base de données lorsqu'un jeu de données change dans la base de données. Informations sur le back-end : NCache utilise cette fonction pour s'enregistrer en tant que client d'Oracle Server. Cela signifie que chaque fois que les données changent dans l'ensemble de données Oracle, NCache est automatiquement notifié. En utilisant ces informations, NCache conserve une carte de tous les éléments mis en cache avec leurs ensembles de données correspondants. Alors, chaque fois que NCache est informé d'un changement, il invalide l'élément de cache correspondant du cache et récupère l'élément mis à jour la prochaine fois que l'application cliente le demande.
Synchronisons NCache avec Oracle Server
Je vais prendre un exemple simple d'une application e-commerce (.NET Core basé) dont tout le succès réside dans sa précision. Des milliers de clients accèdent à cette application pour faire des achats en ligne chaque minute, de sorte que les données de cette application ont été mises en cache.
Maintenant, prenons un scénario très courant où ClientA acheté la dernière Xbox Series X que le magasin avait. Le serveur d'application supprime la quantité de cet élément de la base de données, mais le cache n'est toujours pas au courant de ce changement. Cette incohérence conduit à la rage des clients lorsque ClientB aime le même produit, le paie et reçoit une notification avec un message de paiement réussi mais ne reçoit pas sa dernière Xbox Series X.
Ici, pour s'assurer que l'application ne rencontre pas de problèmes d'intégrité des données à chaque fois que les données changent dans la base de données principale Oracle, NCache fournit un soutien de Dépendance Oracle.
Pour utiliser cette fonction de dépendance, NCache permet de paramétrer votre requête Oracle avec OracleCacheDependencyOracleCacheDependency méthode qui prend des valeurs de paramètre au moment de l'exécution. Cela réduira le nombre de fois que votre requête doit être compilée sur le serveur Oracle, ce qui décuplera les performances de l'application.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
string connectionString = ConfigurationManager.AppSettings["connectionstring"]; string query = "SELECT ROWID, ProductID, ProductName, UnitPrice FROM Products WHERE ProductID = :productID"; var param = new OracleCmdParams(); param.Type = (OracleCmdParamsType.VarChar); param.Value = "XBoxX"; param.Direction = OracleParameterDirection.Input; // Adding the populated parameter to a dictionary Dictionary<string, OracleCmdParams> oracleParam = new Dictionary<string, OracleCmdParams>(); oracleParam.Add("productID", param); // Create Oracle Dependency var oracleDependency = new OracleCacheDependency(connString, query, OracleCommandType.Text, oracleParam); Product product = FetchProductFromDB(param.Value); string key = $"Product:{product.ProductID}"; // Create a CacheItem, add Oracle dependency, and cache it var cacheItem = new CacheItem(product); cacheItem.Dependency = oracleDependency; cache.Insert(key, cacheItem); |
NCache Détails Dépendance du cache à Oracle Configurer l'environnement Oracle
Il y a tellement plus que vous pouvez faire avec OracleCacheDependency. Voici une liste de quelques fonctionnalités très utiles prises en charge avec cette dépendance Oracle.
Rechargement automatique de l'élément de cache via le fournisseur de lecture
OracleCacheDependency est responsable de l'invalidation d'un élément de cache une fois qu'il a changé dans la source de données. NCache fournit Lire via le fournisseur de source de sauvegarde au cas où vous voudriez que le cache non seulement invalide, mais récupère également la dernière version de l'élément modifié à partir du serveur Oracle. Avec Lire à travers option activée, NCache appelle le Lire à travers fournisseur pour récupérer les données mises à jour chaque fois qu'Oracle Server notifie le cache d'une modification.
Le code suivant explique comment vous pouvez obtenir cette fonctionnalité :
1 2 3 4 5 6 7 8 9 |
// Create a new cache item and add oracle dependency to it CacheItem item = new CacheItem(product); item.Dependency = oracleDependency; // Resync if enabled, will automatically resync cache with Oracle server item.ResyncOptions = new ResyncOptions(true); //Add cache item in the cache with Oracle Dependency and Resync option enabled cache.Insert(key, item); |
NCache Détails Dépendance du cache à Oracle Fournisseur de lecture
Dépendance Oracle basée sur une procédure stockée
NCache supports Dépendance Oracle basée sur une procédure stockée si vous préférez conserver toutes vos requêtes Oracle dans la base de données Oracle. Ces procédures stockées sont précompilées sur le serveur Oracle et s'exécutent beaucoup plus rapidement que les requêtes Oracle dynamiques.
Pour créer une procédure stockée dans Oracle, consultez cet exemple :
1 2 3 4 5 6 |
CREATE PROCEDURE SelectProduct (ProductID IN VarChar) AS BEGIN SELECT ProductID, Quantity, Price FROM Products WHERE ProductID = :productID; END; |
L'appel de cette procédure stockée dans votre application .NET est facile. Utilisez l'extrait de code suivant comme exemple.
1 2 3 4 5 6 7 8 9 10 |
OracleCmdParams param = new OracleCmdParams(); param.Type = (OracleCmdParamsType.VarChar); param.Value = "XBoxX"; param.Direction = OracleParameterDirection.Input; var oracleCmdParams = new Dictionary<string, OracleCmdParams>(); oracleCmdParams.Add("productID", param); // Create Oracle Dependency var oracleDependency = new OracleCacheDependency(connString, SelectProduct, OracleCommandType.StoredProcedure, oracleCmdParams); |
NCache Détails Dépendance du cache à Oracle Dépendance Oracle à l'aide d'une procédure stockée
Pourquoi synchroniser NCache avec Oracle Server ?
Personne ne veut que son application sur laquelle il a travaillé si dur échoue simplement parce qu'elle traite des données obsolètes. Vous perdez à la fois des affaires et faites face de cette façon. Mais NCache, à votre grande aise, vous fournit Oracle Dependency qui maintient votre cache synchronisé avec votre base de données Oracle pour vous assurer que le cache que vous utilisez pour vous bénéficier ne vous fait pas défaut.
NCache Détails Télécharger NCache Comparaison Des Éditions