Cache distribué devient très populaire car c'est un moyen puissant d'augmenter les performances et l'évolutivité de votre application et de gérer une charge de transaction extrême sans ralentir. Les applications .NET et Java l'utilisent de plus en plus chaque jour.
Mais, un défi auquel les gens sont confrontés avec le cache distribué est de savoir comment cartographier et stocker données relationnelles dans un stockage d'appariement HashTable (clé, valeur) qu'est un cache distribué. La plupart des caches actuels ne fournissent aucun mécanisme pour gérer cela. Aujourd'hui, je vais discuter de la dépendance des données fournie par le cache ASP.NET, et que NCache intégré dès le premier jour.
Tout comme ASP.NET Cache, dans NCache, Dépendance des données permet de spécifier une dépendance dans le cache distribué entre deux éléments mis en cache. L'élément mis en cache A dépend de l'élément mis en cache B. Et, si B est mis à jour ou supprimé du cache distribué, A est automatiquement supprimé. Cela garantit que s'il existe une contrainte d'intégrité référentielle entre A et B dans la base de données, elle est également respectée dans le cache distribué. Vous pouvez également spécifier une dépendance de données en cascade où A dépend de B et B dépend de C. Ensuite, si vous mettez à jour ou supprimez C, A et B sont tous deux supprimés. Voici un bref exemple de dépendance des données :
NCache Détails Gestion des données relationnelles Documents sur la dépendance des données
La dépendance des données vous permet de créer des relations un-à-un, un-à-plusieurs et plusieurs-à-plusieurs dans le cache distribué. Voici comment vous géreriez différents scénarios :
Relation individuelle
Un a Individuelle avec B. Ajouter B sans aucune dépendance de données. Ensuite, ajoutez A et spécifiez une dépendance de données pour B. Si A et B ont tous deux une dépendance mutuelle, mettez à jour B par la suite et spécifiez une dépendance sur A.
Relation un-à-plusieurs
Un a un à plusieurs avec B. Ajoutez d'abord A sans aucune dépendance de données. Ensuite, ajoutez un ou plusieurs éléments B et spécifiez une dépendance de données pour le A donné pour chacun d'eux. De cette façon, si A est mis à jour ou supprimé, tous les B seront automatiquement supprimés par NCache.
Relation plusieurs à plusieurs
A et B ont plusieurs à plusieurs l'un avec l'autre. Ajoutez un ou plusieurs A. Ensuite, ajoutez un ou plusieurs B et spécifiez la dépendance des données pour les A appropriés. Ensuite, revenez en arrière et mettez à jour les A pour spécifier la dépendance des données sur les B appropriés.
Voici un exemple simple de création de dépendance un-à-un dans le cache.
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 |
public static void CreateDependencies(ICache _cache) { try { string keyB = "objectB-1000"; Object objB = new Object(); string keyA = "objectA-1000"; Object objA = new Object(); // Initializing cacheItems var itemOne = new CacheItem(objA); var itemTwo = new CacheItem(objB); // Adding objA dependent on ObjB itemOne.Dependency = new KeyDependency(keyB); //Adding items to cache _cache.Add(keyB, itemTwo); _cache.Add(keyA, itemOne); // Removing "objB" automatically removes “objA” as well _cache.Remove(keyB); _cache.Dispose(); } catch (Exception e) { throw; } } |
Alors, NCache vous permet de tirer parti de la dépendance des données et de spécifier les relations de données dans le cache distribué. Téléchargez une version d'essai complète de 60 jours de NCache Enterprise et essayez-le par vous-même.
Merci d'avoir partagé le blog, il a été bien expliqué sur la dépendance aux données, cela valait la peine d'investir du temps pour lire ce blog.
Salut Iqbal, merci d'avoir partagé l'article d'imairnftove. Pouvez-vous s'il vous plaît expliquer le cache distribué? Cela signifie-t-il que le cache est maintenu sur différents serveurs frontaux (physiques) et sur le serveur de base de données ? J'ai un scénario où le serveur frontal (FS) 1 maintient le cache local C1. FS2 maintient son propre cache local C2. FS3 maintient son propre cacheC3 local. Il existe un serveur de base de données doté d'un cache global GC. Tout le cache local C1, C2, C3 doit dépendre de GC. Si GC est mis à jour, tout le cache local est invalidé. Je ne sais pas comment cela va fonctionner parce qu'à mon avis, nous ne pouvons pas contrôler la mémoire sur l'autre système. Veuillez jeter un peu de lumière là-dessus. Merci Khusi
NCache est un cache distribué en mémoire hors processus. Il peut former un cluster de nœuds de cache lors de l'exécution et peut être distribué sur plusieurs applications.
Voici comment NCache gérera votre scénario :
Vous pouvez créer un cache global en cluster (par exemple, ayant 2 nœuds en cluster) sur les serveurs de base de données ou les serveurs de cache dédiés et pouvez ensuite utiliser la fonctionnalité "Cache client" sur chaque serveur frontal FS1, FS2 et FS3. NCache Le cache client est un cache local exécuté sur NCache boîtiers clients (les serveurs Web/App sont NCache clients) et conserve une copie des données localement sur le boîtier client auquel on accède le plus souvent à partir du cache en cluster.
Les appels ultérieurs pour les mêmes données seront directement servis à partir du cache client local, ce qui donnera plus de performances en économisant les trajets réseau, les caches client peuvent également être de nature in-proc.
La synchronisation des données est gérée automatiquement par NCache. En cas de mises à jour sur le cache groupé global, les caches client invalideront/supprimeront automatiquement les éléments et apporteront une copie mise à jour du cache groupé lors d'un accès ultérieur.
Salut Iqbal,
Merci pour le partage d'article informatif. Pouvez-vous s'il vous plaît expliquer le cache distribué? Cela signifie-t-il que le cache est maintenu sur différents serveurs frontaux (physiques) et serveur de base de données ?
J'ai un scénario - Le serveur frontal (FS) 1 maintient le cache local C1. FS2 maintient son propre cache local C2. FS3 maintient son propre cacheC3 local. Il existe un serveur de base de données doté d'un cache global GC. Tout le cache local C1, C2, C3 doit dépendre de GC. Si GC est mis à jour, tout le cache local est invalidé. Je ne sais pas comment cela va fonctionner car à mon avis, nous ne pouvons pas contrôler la mémoire sur l'autre système ?
Merci d'apporter un peu de lumière à ce sujet.
Merci
Khousi
C'est vraiment une information intéressante et utile. Je suis heureux que vous ayez partagé cette information utile avec nous. Tenez-nous informé de cette façon s'il-vous-plaît. Merci d'avoir partagé.