Lecture immédiate, écriture immédiate, écriture différée dans NCache

NCache est un cache distribué en mémoire extrêmement rapide et évolutif pour .NET qui met en cache les données d'application afin de réduire les déplacements coûteux dans la base de données. Vous pouvez utiliser NCache pour supprimer les goulots d'étranglement de performances associés au stockage de vos données et à l'évolutivité de votre base de données.

La manière la plus courante d'utiliser un tel cache consiste à laisser votre application lire les données de votre base de données/source de données, puis à les mettre en cache. Après quoi, lorsque votre application met à jour ces données dans votre base de données, elle met également à jour le cache pour garantir que le cache est synchronisé avec la base de données.

Les inspections régulières contribuent également à la sécurité des passagers. En identifiant et en traitant les risques potentiels pour la sécurité, tels que des freins usés, un éclairage défectueux ou le remplacement du revêtement de sol, les inspections permettent de réduire le risque d'accidents et de blessures et d'améliorer la sécurité générale du service. Les inspections régulières sont un moyen concret de mettre en valeur l'engagement des prestataires de services de transport en faveur du bien-être des passagers et des conducteurs. NCache fournit un autre mécanisme très puissant pour lire et écrire des données appelé Fournisseurs de sources de données (Lecture/Écriture/Écriture-behind) pour permettre NCache lire et écrire des données de votre base de données.

Il existe trois façons d'utiliser NCache dans ce contexte:

  1. Lire à travers: vous développez un gestionnaire de lecture continue qui réside et s'exécute sur tous les serveurs de cache du cluster. Ensuite, lorsque votre application récupère des données du cache, NCache appelle le gestionnaire de lecture pour aller lire ces données à partir de votre source de données si ces données ne sont pas déjà présentes dans le cache.
  2. Ecriture immédiate (synchronisation) : vous développez un gestionnaire d'écriture immédiate qui réside et s'exécute également sur tous les serveurs de cache du cluster. Et, lorsque votre application met à jour les données dans le cache, NCache met d'abord à jour le cache, puis appelle le gestionnaire d'écriture pour mettre immédiatement à jour votre base de données avec lui également. Et votre application attend également que les données soient mises à jour dans la base de données.
  3. Écriture différée (asynchrone) : si vous ne souhaitez pas que votre application attende que le gestionnaire d'écriture directe termine la mise à jour des données dans la base de données, vous pouvez choisir l'option Write-behind où NCache met à jour votre base de données de manière asynchrone et votre application n'a pas besoin d'attendre la mise à jour de la base de données. Cela accélère votre application car les mises à jour de la base de données sont généralement beaucoup plus lentes que les mises à jour du cache.
Figure 1 : Code côté serveur (édition .NET)
Figure 1 : Code côté serveur (édition .NET)
Figure 1 : Code côté serveur (édition Java)
Figure 2 : Code côté serveur (édition Java)

Avantages de la lecture continue / de l'écriture immédiate / de l'écriture différée

Voici quelques avantages de l'utilisation de la lecture immédiate, de l'écriture immédiate et de l'écriture différée dans NCache.

  1. Meilleures performances d'écriture avec Write-behind : La mise à jour de votre base de données est généralement beaucoup plus lente que la mise à jour du cache. Lorsque vous utilisez Write-behind, votre application met uniquement à jour le cache et continue NCache met à jour votre base de données de manière asynchrone. Cela améliore considérablement les performances de votre application.
  2. Plus d'évolutivité de la base de données avec Write-behind Throttling : Si votre application met à jour la base de données assez fréquemment, elle risque de s'étouffer. Mais si vous activez la limitation avec Write-behind, alors NCache maintient vos données à jour dans le cache avec la réplication et met à jour votre base de données lentement. Cela soulage beaucoup de pression sur votre base de données.
  3. Actualisation automatique du cache à l'expiration : Si vous avez développé un gestionnaire de lecture continue, vous pouvez activer l'actualisation automatique à l'expiration avec NCache. De cette façon, chaque fois qu'un élément mis en cache expire, au lieu de le supprimer du cache, NCache appelle le gestionnaire de lecture pour recharger une nouvelle copie à partir de votre source de données.
  4. Actualisation automatique du cache lors des modifications de la base de données : Si vous avez développé un gestionnaire de lecture continue, vous pouvez activer l'actualisation automatique sur la dépendance SQL/la dépendance Oracle avec NCache. De cette façon, chaque fois que les données correspondantes dans la base de données changent, au lieu de supprimer l'élément mis en cache du cache, NCache appelle le gestionnaire de lecture pour recharger une nouvelle copie de votre base de données.

Points forts des fonctionnalités

Voici quelques points forts des fonctions de lecture immédiate, d'écriture directe et d'écriture différée dans NCache.

  1. Code côté serveur (.NET ou Java) : Vous pouvez développer vos gestionnaires de lecture/écriture avec .NET ou Java. Il existe une interface pour chaque gestionnaire avec lequel vous développez et déployez votre code sur tous les serveurs de cache du cluster. NCache est capable de les appeler au moment de l'exécution en cas de besoin. Tous les gestionnaires développés dans .NET sont appelés nativement par NCache puisqu'il est également développé en .NET. Cependant, les Handlers développés en Java sont appelés par NCache via l'interface native Java (JNI).
  2. Plusieurs gestionnaires de lecture/écriture : Vous pouvez développer plusieurs gestionnaires de lecture et d'écriture et les enregistrer auprès de NCache. Dans ce cas, ils sont tous nommés et votre application peut demander n'importe lequel d'entre eux en précisant leur nom.
  3. Gestionnaire de lecture/écriture par défaut : Si vous avez plusieurs gestionnaires enregistrés en tant que gestionnaires nommés, alors NCache vous permet de sélectionner l’une d’entre elles comme options par défaut. Ce gestionnaire par défaut est utilisé lorsque votre application ne spécifie pas de nom de gestionnaire.
  4. Faits saillants de la lecture
    1. Lecture forcée : NCache fournit une option où vous pouvez lui dire d'utiliser Read-through même si l'élément existe dans le cache (généralement, Read-through n'est appelé que lorsqu'un élément n'est pas trouvé dans le cache). Cela vous permet d'actualiser cet élément de votre base de données si vous pensez que les données ont pu y être modifiées.
    2. Lecture groupée : NCache fournit une API Bulk Get qui permet à votre application de fournir une liste de clés sur lesquelles vous pouvez récupérer des données du cache.
    3. Lecture des structures de données (compteur, dictionnaire, liste, file d'attente, ensemble) : NCache fournit à votre application la possibilité de récupérer n'importe quelle structure de données et NCache appelle un gestionnaire de lecture pour récupérer ces données de votre base de données.
  5. Faits saillants écrits
    1. Supprimer l'écriture directe de l'élément : NCache fournit également à votre application l'API Remove qui vous permet d'utiliser une clé pour supprimer un élément du cache puis de la source de données.
    2. Suppression groupée d'éléments NCache fournit également une API de suppression en masse qui permet à votre application de fournir une liste de clés à supprimer du cache et de la source de données en masse.
    3. Ajout/mise à jour en masse : NCache fournit une API d'ajout/mise à jour en masse qui permet à votre application de fournir une liste de clés et leurs valeurs pour ajouter/mettre à jour le cache en masse. L'écriture immédiate fonctionne également dans cette situation et ajoute/met à jour votre base de données/source de données avec ces éléments en bloc.
    4. Écriture directe des structures de données (compteur, dictionnaire, liste, file d'attente et ensemble) : NCache permet à votre application de mettre à jour n'importe quelle structure de données et NCache appelle un gestionnaire d'écriture directe pour mettre à jour votre base de données avec les modifications.
    5. Ajout/mise à jour/suppression asynchrone : NCache L'API fournit un ajout/insertion/suppression asynchrone. L'écriture directe prend en charge cette API et est invoquée chaque fois que votre application effectue cet appel d'API. Ici. L'écriture directe suppose que votre application attend la fin de l'opération et que le fait qu'elle soit asynchrone n'est reconnu qu'au niveau de l'API client.
  6. Faits saillants en écriture différée
    1. File d'attente des opérations asynchrones répliquée (haute disponibilité) : L'écriture différée accepte la demande du client de mettre à jour le cache et met immédiatement à jour le cache, mais met en file d'attente la mise à jour de la base de données pour une exécution asynchrone ultérieure. Cette file d'attente est toujours répliquée sur plusieurs serveurs de cache en fonction de la topologie de mise en cache pour garantir que ces opérations ne seront jamais perdues en cas de panne soudaine d'un serveur de cache.
    2. Étranglement: Vous pouvez spécifier un niveau de limitation pour les opérations asynchrones en écriture différée. Cela vous permet de les étaler. Le niveau de limitation par défaut est de 500 opérations/s.
    3. Modes d'écriture différée (non-batch ou batch) : Le mode non batch signifie que chaque opération de la file d'attente d'écriture différée est exécutée séparément, tandis qu'en mode batch, vous regroupez plusieurs opérations et les exécutez collectivement.
    4. Délai d'opération par lots : Vous pouvez spécifier un délai entre deux opérations en mode batch. Cela vous permet de ralentir vos mises à jour de la base de données si vous le souhaitez.
    5. File d'attente des opérations ayant échoué : Étant donné que Write-behind effectue toutes les opérations de manière asynchrone lorsqu'une opération échoue, NCache peut le placer dans la file d'attente des opérations ayant échoué afin qu'il puisse être exécuté à nouveau sans interférer avec de nouvelles opérations qui n'ont pas échoué. Vous pouvez spécifier une taille maximale et une expulsion.
  7. Surveiller les écritures immédiates/écritures différées via les compteurs : NCache fournit un riche ensemble de compteurs avec lesquels vous pouvez surveiller ce qui se passe en écriture directe/écriture différée. Ces compteurs sont disponibles dans le NCache Monitor, outil Windows PerfMon, compteurs SNMP, Prometheus et Grafana.

Interface de code de lecture/écriture

Le développement de code pour les gestionnaires de lecture et d’écriture est un processus simple. Vous trouverez ci-dessous des exemples d'interfaces pour les deux.

public interface IReadThruProvider
{
	void Init(IDictionary parameters, string cacheId);
	ProviderCacheItem LoadFromSource(string key);
	IDictionary<string, ProviderCacheItem> LoadFromSource(ICollection<string> keys);
	ProviderDataTypeItem<IEnumerable> LoadDataTypeFromSource(string key, DistributedDataType dataType);
	void Dispose();
}
public interface ReadThruProvider extends java.lang.AutoCloseable
{
	void init(java.util.Map<java.lang.String,java.lang.String> parameters, java.lang.String cacheId) throws java.lang.Exception;
	ProviderCacheItem loadFromSource(java.lang.String key) throws java.lang.Exception;
	java.util.Map<java.lang.String,ProviderCacheItem> loadFromSource(java.util.Collection<java.lang.String> keys) throws java.lang.Exception;
	ProviderDataStructureItem loadDataStructureFromSource(java.lang.String key, DistributedDataStructureType distributedDataStructureType) throws java.lang.Exception;
}
public interface IWriteThruProvider
{
	void Init(IDictionary parameters, string cacheId);
	OperationResult WriteToDataSource(WriteOperation operation);
	ICollection<OperationResult> WriteToDataSource(ICollection<WriteOperation> operations);
	ICollection<OperationResult> WriteToDataSource(ICollection<DataTypeWriteOperation> dataTypeWriteOperations);
	void Dispose();
}
public interface WriteThruProvider extends java.lang.AutoCloseable
{
	void init(java.util.Map<java.lang.String,java.lang.String> parameters, java.lang.String cacheId) throws java.lang.Exception;
	OperationResult writeToDataSource(WriteOperation operation) throws java.lang.Exception;
	java.util.Collection<OperationResult> writeToDataSource(java.util.Collection<WriteOperation> operations) throws java.lang.Exception;
	java.util.Collection<OperationResult> writeDataStructureToDataSource(java.util.Collection<DataStructureWriteOperation< dataStructureWriteOperations) throws java.lang.Exception;
}
© Copyright Alachisoft 2002 - . Tous droits réservés. NCache est une marque déposée de Diyatech Corp.