Comportement et utilisation des structures de données dans le cache
NCache prend en charge les structures de paires clé-valeur où la clé est un type de chaîne par rapport à une valeur qui peut être n'importe quel type primitif, objet personnalisé, CacheItem, ou une structure de données. Groupes, Tags, Expiration, Verrouillable, Dépendances, et d'autres peuvent être affectées à ces valeurs.
Notes
Cette fonctionnalité n'est disponible que dans le NCache Enterprise.
Cependant, la mise à jour de toute valeur dans une structure de données, disons une liste, nécessitait de la récupérer dans le cache, de la mettre à jour, puis de la rajouter dans le cache. Cela a entraîné des appels supplémentaires sur le réseau. NCache a maintenant éliminé cette restriction en fournissant un support exclusif pour l'ajout/la mise à jour des structures de données en manipulant les données directement sur le serveur. Par conséquent, l'amélioration de la performance globale.
NCache fournit un support explicite pour les structures de données suivantes :
- Liste
- Queue
- Jeu de hachage
- Dictionnaire
- Counter
Outre les fonctions fournies par les interfaces de structure de données natives, NCache étend ses fonctionnalités en offrant la possibilité de spécifier des métadonnées à l'aide d'un CacheItem
. Cela signifie que les structures de données peuvent avoir des balises, une expiration et une dépendance, tout comme les autres objets du cache.
Important
L'ensemble de la structure de données résidera dans un nœud d'un cache cluster. Par exemple, si vous créez un dictionnaire de 100 éléments, l’ensemble du dictionnaire de 100 éléments existera dans un nœud et ne sera pas distribué entre les autres nœuds.
La figure suivante montre les différentes structures de données par rapport à leurs clés de cache respectives résidant dans un cache cluster de 3 nœuds :
Caractéristique Comportement avisé
Stockage
Tout élément stocké dans une structure de données est sérialisé en JSON pour prendre en charge les opérations natives sur le serveur, telles que
Contains
.Les structures de données ont leur propre taille ainsi que les métadonnées qui ont un impact sur la taille du cache.
Annotation du champ principal
[Champ principal] L'annotation peut être utilisée dans les classes de modèles utilisateur pour les structures de données, y compris la liste et la file d'attente. Les opérations de recherche sur les structures de données, telles que Contains
, peut être utilisé pour sérialiser et envoyer uniquement cet attribut/propriété au lieu de sérialiser et de transférer l'intégralité de l'objet vers le serveur. Seulement le PrimaryField
L'attribut sera envoyé au serveur et comparé côté serveur, réduisant ainsi le coût de l'opération.
Par exemple, la Customer
la classe contient la propriété CustomerId
, qui est unique. Cela peut être marqué comme le PrimaryField
, et au lieu de comparer l'objet complet, disons Contains
, en comparant uniquement PrimaryField
peut terminer l'opération.
class Customer
{
[PrimaryField]
public string CustomerId { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
Clés de cache
Les structures de données dans NCache sont nommés, c'est-à-dire qu'ils seront stockés sur une clé de cache comme les autres objets de NCache. Si une clé de cache existe pour un CacheItem
, il ne peut pas être utilisé sur une structure de données.
Fonctionnalités consultables
Les attributs interrogeables tels que les groupes, les balises et les balises nommées peuvent être spécifiés par rapport à une structure de données lors de sa création. UN CacheItem
et une structure de données peut appartenir au même groupe/balise/balise nommée. Pour plus de détails, reportez-vous à Configurer les attributs de recherche.
Fonctionnalités d'invalidation des données
Expulsion
L'ensemble de la structure de données est expulsée du cache si elle entre dans la catégorie « à expulser ». Non seulement la création de la structure de données conduit à une éventuelle expulsion, mais toute opération d'écriture sur la structure de données peut également déclencher l'expulsion. Par exemple, un élément est ajouté à la liste de telle sorte que les critères d'expulsion soient remplis.
Expiration
Les structures de données peuvent être invalidées du cache après un intervalle de temps spécifié, tout comme un CacheItem
. Les structures de données prennent en charge à la fois, Expiration absolue ainsi que Expiration glissante.
Dépendances du cache
Les structures de données prennent en charge toutes les dépendances du cache. Pour les dépendances basées sur des clés, une liste peut dépendre d'un CacheItem
et vice versa. Pour plus de détails, reportez-vous à Configurer les attributs d'invalidation.
Interrogation sur les structures de données
Les structures de données peuvent être interrogées dans le cache si elles ont attributs de recherche configuré. Les attributs consultables incluent :
- Groupes
- Tags
- Balises nommées
Pour plus de détails, reportez-vous à Requête sur les structures de données.
Fournisseurs de source de sauvegarde
Lire à travers
Ceci est uniquement au niveau de la collection. Les structures de données peuvent être lues directement à partir d'une source de données si elles ne sont pas trouvées dans le cache. Les éléments individuels d'une structure de données ne seront pas lus à partir de la source de données. Par conséquent, la liste complète des éléments doit être récupérée à partir de la source de données.
Réécriture
L'écriture directe est déclenchée dans deux cas :
- Lors de la création de la structure de données à l'intérieur du cache (niveau collection).
- Lors de l'ajout de données à une structure de données déjà existante (niveau article).
Chargeur de cache et rafraîchissement
Vous pouvez charger automatiquement des structures de données dans le cache au démarrage du cache, à l'aide de la fonctionnalité Cache Startup Loader. Cela nécessite d'implémenter une interface ICacheLoader
avec ses méthodes. De plus, s'il y a un changement ou une mise à jour dans les données, Cache Refresher
est utilisé pour rafraîchir les données. Pour plus de détails, reportez-vous à Chargeur de cache et rafraîchissement.
Cache Client
La structure des données n'est pas stockée dans le cache client. Quelconque Obtenez l'opération le récupérera dans le cache principal mais ne le stockera pas dans le cache client. Pour plus de détails, reportez-vous à Cache Client. Par exemple, lorsque nous verrouillons un dictionnaire, tout le dictionnaire est verrouillé, sans aucune autre opération.
Verrouillable
La NCache fournit un mécanisme de verrouillage efficace pour la synchronisation des données et l'intégrité du cache mis à jour par différents clients parallèles. NCacheLe verrouillage interne de garantit la cohérence des structures de données sur l'ensemble du cluster de cache pour chaque mise à jour de la même structure de données. Par exemple, entier dictionnaire est verrouillé lorsque nous verrouillons un dictionnaire.
Notifications d'événement
Les événements au niveau du cache et les événements basés sur les clés sont pris en charge avec les événements au niveau de la structure de données et peuvent être enregistrés ensemble sur une structure de données. Par exemple:
Une liste est créée dans le cache. Cela déclenche le
ItemAdded
Evénement de niveau cache et non l'événement de structure de données.Un élément est ajouté à cette liste. Cela déclenche la
ItemUpdated
Événement de niveau de cache car la liste a été mise à jour et leItemAdded
événement de structure de données en tant que nouvel élément a été ajouté à la liste.
Limites
- Les structures de données imbriquées ne sont pas encore prises en charge.
- La
CacheItem
ne peut pas être stocké dans une structure de données. Par exemple, une liste deCacheItems
n'est pas encore pris en charge. - Les objets personnalisés du HashSet ne sont pas encore pris en charge.
- Une clé de dictionnaire ne peut être que de type chaîne.
Comportement judicieux de la topologie
Topologie miroir
Pour Topologie miroir, les opérations sont effectuées sur le nœud actif. Ces opérations sont ensuite répliquées sur le nœud passif.
Topologie répliquée
Pour Topologie répliquée, les opérations sont effectuées sur le nœud auquel le client est connecté, qui réplique ensuite les opérations sur tous les nœuds.
Topologie partitionnée
In Topologie partitionnée, toute la structure de données existe sur le même nœud. Il est distribué en fonction de la clé. Cela signifie que quelle que soit la taille du dictionnaire, il existera sur un nœud ; le dictionnaire lui-même ne sera pas partitionné entre les nœuds.
Topologie de réplication de partition
In Topologie de réplication de partition, les opérations se comportent de la même manière que dans une topologie partitionnée. La structure de données est distribuée en fonction de la clé de cache et résidera sur le même nœud. Sa réplique existera sur l'autre nœud.
Voir aussi
Comportement et utilisation de la liste dans le cache
Comportement et utilisation de la file d'attente dans le cache
Définir le comportement et l'utilisation dans le cache
Comportement et utilisation du dictionnaire dans le cache
Comportement et utilisation du compteur dans le cache