NCache Open Source en tant que cache de deuxième niveau Nhibernate

NHibernate est une solution de mappage objet-relationnel (ORM) populaire pour .NET. Et il est fréquemment utilisé dans des environnements à transactions élevées où les applications sont confrontées à des goulots d'étranglement en termes de performances et d'évolutivité en raison de la base de données et du stockage des données.

Pour gérer cela, NHibernate propose deux types de mise en cache, le cache de premier niveau (cache de 1er niveau) et le cache de deuxième niveau (cache de 2e niveau). Le cache de premier niveau est intégré et lié à « l'objet de session » de l'utilisateur, tandis que le cache de deuxième niveau fournit une architecture enfichable et est lié au niveau « facteur de session » (c'est-à-dire au niveau de l'application). Cela signifie que le cache n'est pas affecté par les sessions utilisateur qui vont et viennent. Vous pouvez brancher un cache tiers en tant que cache de deuxième niveau NHibernate.

NCache est un cache distribué extrêmement rapide et évolutif linéairement pour les applications .NET. NCache vous permet d'ajouter plus de serveurs de cache pour gérer des charges de transactions plus importantes. Vous pouvez vous connecter NCache en tant que cache de second niveau NHibernate.

Mise en place NCache en tant que cache de second niveau NHibernate

Dans le cadre de l'architecture du fournisseur de cache de deuxième niveau NHibernate, NCache a mis en place ICacheProvider ainsi que ICacheinterfaces. En conséquence, vous pouvez configurer NCache comme NHibernate Second Level Cache sans aucune programmation et simplement via des modifications du fichier de configuration.

Vous modifiez simplement votre app.config et préciser NCache en tant que fournisseur de cache de deuxième niveau et ajoutez une propriété pour celui-ci. Vous activez également la mise en cache de deuxième niveau et d'autres sous-caches de NHibernate dans app.config. Voici un exemple de app.config changements:

<hibernate-configurationxmlns="urn:nhibernate-configuration-2.2">
...
  <session-factory>
  ...
    <property name="cache.provider_class">
      Alachisoft.NCache.Integrations.NHibernate.Cache.NCacheProvider,
      Alachisoft.NCache.Integrations.NHibernate.Cache
    </property>
    <property name="cache.use_second_level_cache">
      true
    </property>
  ...
  </session-factory>
</hibernate-configuration>
  
<appSettings>
  <add key="ncache.application_id" 
       value="myapp" />
</appSettings>

Configurer les régions pouvant être mises en cache

NCache permet à chaque région NHibernate d'être configurée différemment avec ses propres propriétés pour la mise en cache des objets. Dans ce but NCache a un fichier de configuration nommé NCacheNHibernate.xml, qui contient toutes les configurations de région utilisées par le cache de deuxième niveau NHibernate. Voici un exemple de ce fichier de configuration :

<configuration>
  <application-config application-id="myapp"
                      enable-cache-exception="true"
                      default-region-name="default"
                      key-case-sensitivity="false">
    <cache-regions>
      <region name="default"
              cache-name="mycache"
              priority="default"
              expiration-type="none"
              expiration-period="0" />
      <region name="AbsoluteExpirationRegion"
              cache-name="myRegioncache"
              priority="Default"
              expiration-type="sliding"
              expiration-period="180" />
    </cache-regions>
    ...
  </application-config>
</configuration>

Configurer la synchronisation de la base de données

NCache est un puissant cache distribué pour .NET et fournit de nombreuses fonctionnalités riches. L'une de ces fonctionnalités est la synchronisation de la base de données où le cache garde une trace des modifications de la base de données et invalide un élément mis en cache ou le recharge si ses données correspondantes changent dans la base de données.

Vous pouvez configurer le fournisseur NHibernate Second Level Cache pour NCache pour utiliser la synchronisation de la base de données. Juste modifier NCacheNHibernate.xml fichier de configuration comme suit :

<configuration>
  <application-config application-id="myapp" 
                      enable-cache-exception="true" 
                      default-region-name="default"
                      key-case-sensitivity="false">
    ...
    <database-dependencies>
      <dependency entity-name="nhibernator.BLL.Customer" 
                  type="sql" 
                  sql-statement="SELECT ContactName FROM dbo.Customers
                                 WHERE CustomerID =?" 
                  cache-key-format="depdency.customer:[pk]"/>
    </database-dependencies>
  </application-config>
</configuration>

Configurer le cache de requêtes NHibernate

NHibernate fournit une fonctionnalité de mise en cache des requêtes où il met en cache les résultats des requêtes dans le cache de deuxième niveau. Vous pouvez activer le cache de requêtes NHibernate dans app.config fichiers de configuration comme suit :

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  ...
  <session-factory>
  ...
    <property name="cache.use_query_cache">
    true
    </property>
    ...
  </session-factory>
</hibernate-configuration>

La requête ainsi que les clés primaires des jeux de résultats sont stockées dans une région de requête par défaut nommée NHibernate.Cache.StandardQueryCache. Mais les objets récupérés à la suite d’une requête sont mis en cache dans leurs régions respectives. De plus, l'activation du cache de requêtes ne met pas en cache chaque requête par défaut. Au lieu de cela, vous devez définir chaque requête comme pouvant être mise en cache dans le code comme suit :

IQuery qry = session.CreateQuery("from Customer c").SetCacheable(true);

Bénéfices d'un NCache en tant que cache de second niveau NHibernate

Si votre application NHibernate s'exécute dans un environnement multi-serveur, vous avez besoin d'un cache distribué comme NCache en tant que fournisseur de cache NHibernate de deuxième niveau pour les raisons suivantes :

  • Évolutivité linéaire : Vous pouvez faire évoluer votre application de manière linéaire en ajoutant davantage de serveurs de cache à mesure que la charge de transactions augmente. Cela augmente à la fois votre capacité de transaction et votre capacité de stockage.
  • Cache vraiment élastique : NCache est un cache véritablement élastique avec une architecture de clustering de cache peer-to-peer et un riche ensemble de topologies de mise en cache telles que le cache en miroir, répliqué, partitionné et de réplique de partition. Cela vous permet de garantir une disponibilité à 100 % et aucune perte de données. Vous obtenez tout cela automatiquement lorsque vous utilisez NCache avec Hibernate.
  • Synchronisation de la base de données : Vous pouvez synchroniser le cache avec la base de données (SQL Server, Oracle et OLEDB). Ainsi, si des données de la base de données changent, le cache invalide ou recharge ses éléments mis en cache correspondants. Cela garantit que votre cache est toujours à jour. Vous pouvez activer cette fonctionnalité avec NHibernate, comme indiqué ci-dessus.
  • Opérations asynchrones : NCache a des opérations asynchrones où votre application n'a pas besoin d'attendre même la mise à jour du cache. Vous pouvez l'activer avec NHibernate.
  • Sérialisation compacte : NCache possède sa propre sérialisation qui est beaucoup plus rapide que la sérialisation .NET classique. Vous pouvez l'activer sans aucune modification de code. NCache génère en fait du code de sérialisation au moment de l'initialisation, le compile en mémoire et l'utilise pour les opérations de sérialisation/désérialisation. Vous pouvez mélanger et assortir cela avec la sérialisation .NET standard.

Que faire ensuite?

© Copyright Alachisoft 2002 - . Tous droits réservés. NCache est une marque déposée de Diyatech Corp.