NCache Open Source come cache di secondo livello di Nibernate

NHibernate è una soluzione ORM (Object Relational Mapping) popolare per .NET. Inoltre, viene spesso utilizzato in ambienti ad alto numero di transazioni in cui le applicazioni devono affrontare colli di bottiglia in termini di prestazioni e scalabilità a causa del database e dell'archiviazione dei dati.

Per gestire ciò, NHibernate fornisce due tipi di memorizzazione nella cache, Cache di primo livello (Cache di 1° livello) e Cache di secondo livello (Cache di 2° livello). La cache di primo livello è integrata e legata all'"oggetto sessione" dell'utente, mentre la cache di secondo livello fornisce un'architettura collegabile ed è legata al livello "fattore sessione" (ovvero a livello di applicazione). Ciò significa che la cache non è influenzata dalle sessioni utente che vanno e vengono. Puoi collegare una cache di terze parti come cache di secondo livello di NHibernate.

NCache è una cache distribuita estremamente veloce e scalabile linearmente per applicazioni .NET. NCache consente di aggiungere più server cache per gestire maggiori carichi di transazioni. Puoi collegarti NCache come cache di secondo livello di NHibernate.

Impostare NCache come cache di secondo livello di NHibernate

Come parte dell'architettura del provider della cache di secondo livello di NHibernate, NCache ha implementato ICacheProvider ed ICacheinterfaces. Di conseguenza, puoi configurare NCache come cache di secondo livello di Hibernate senza alcuna programmazione e semplicemente modificando il file di configurazione.

Modifica semplicemente il tuo app.config e specificare NCache come provider di cache di secondo livello e aggiungi una proprietà per esso. Abilita anche la memorizzazione nella cache di secondo livello e altre sottocache di NHibernate in app.config. Ecco un esempio di app.config modifiche:

<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>

Configura le regioni memorizzabili nella cache

NCache consente a ciascuna regione di Hibernate di essere configurata in modo diverso con le proprie proprietà per la memorizzazione nella cache degli oggetti. Per questo scopo NCache ha un file di configurazione chiamato NCacheNHibernate.xml, che contiene tutte le configurazioni della regione utilizzate dalla cache di secondo livello di NHibernate. Di seguito è riportato un esempio di quel file di configurazione:

<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>

Configura la sincronizzazione del database

NCache è una potente cache distribuita per .NET e fornisce molte funzionalità avanzate. Una di queste funzionalità è la sincronizzazione del database in cui la cache tiene traccia delle modifiche del database e invalida un elemento memorizzato nella cache o lo ricarica se i dati corrispondenti cambiano nel database.

È possibile configurare il provider di cache di secondo livello NHibernate per NCache per utilizzare la sincronizzazione del database. Basta modificare NCacheNHibernate.xml file di configurazione come segue:

<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>

Configura NHibernate Query Cache

NHibernate fornisce una funzionalità di memorizzazione nella cache delle query in cui memorizza nella cache i risultati delle query nella cache di secondo livello. Puoi abilitare la cache delle query di Hibernate in app.config file di configurazione come segue:

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

La query insieme alle chiavi primarie dei set di risultati viene archiviata in un'area di query predefinita denominata NHibernate.Cache.StandardQueryCache. Tuttavia, gli oggetti recuperati come risultato della query vengono memorizzati nella cache nelle rispettive regioni. Inoltre, l'abilitazione della cache delle query non memorizza nella cache ogni query per impostazione predefinita. È invece necessario impostare ciascuna query come memorizzabile nella cache nel codice come segue:

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

Vantaggi di NCache come cache di secondo livello di NHibernate

Se la tua applicazione Hibernate è in esecuzione in un ambiente multi-server, allora hai bisogno di una cache distribuita come NCache come provider di cache di secondo livello di NHibernate per i seguenti motivi:

  • Scalabilità lineare: Puoi scalare la tua applicazione in modo lineare aggiungendo più server cache man mano che aumenta il carico delle transazioni. Ciò aumenta sia la capacità di transazione che la capacità di archiviazione.
  • Cache veramente elastica: NCache è una cache veramente elastica con un'architettura di clustering della cache peer-to-peer e un ricco set di topologie di caching come la cache con mirroring, replicata, partizionata e Partition-Replica. Ciò ti consente di garantire un tempo di attività del 100% e nessuna perdita di dati. Ottieni tutto questo automaticamente durante l'utilizzo NCache con NHibernate.
  • Sincronizzazione database: È possibile sincronizzare la cache con il database (SQL Server, Oracle e OLEDB) in modo che, se i dati nel database cambiano, la cache invalida o ricarica gli elementi memorizzati nella cache corrispondenti. Ciò garantisce che la cache sia sempre aggiornata. Puoi abilitare questa funzione con NHibernate, come mostrato sopra.
  • Operazioni asincrone: NCache ha operazioni asincrone in cui la tua applicazione non deve attendere nemmeno l'aggiornamento della cache. Puoi abilitarlo con NHibernate.
  • Serializzazione compatta: NCache ha una propria serializzazione che è molto più veloce della normale serializzazione .NET. Puoi abilitarlo senza alcuna modifica del codice. NCache genera effettivamente il codice di serializzazione al momento dell'inizializzazione, lo compila in memoria e lo utilizza per operazioni di serializzazione/deserializzazione. È possibile combinarlo e abbinarlo alla normale serializzazione .NET.

Cosa fare dopo?

© Copyright Alachisoft 2002 - . Tutti i diritti riservati. NCache è un marchio registrato di Diyatech Corp.