NCache Open Source como caché de segundo nivel de Nhibernate

NHibernate es una popular solución de mapeo relacional de objetos (ORM) para .NET. Y se utiliza con frecuencia en entornos de alta transacción donde las aplicaciones enfrentan cuellos de botella de rendimiento y escalabilidad debido a la base de datos y el almacenamiento de datos.

Para manejar esto, NHibernate proporciona dos tipos de almacenamiento en caché, caché de primer nivel (caché de primer nivel) y caché de segundo nivel (caché de segundo nivel). La caché de primer nivel está integrada y vinculada al "objeto de sesión" del usuario, mientras que la caché de segundo nivel proporciona una arquitectura conectable y está vinculada al nivel de "factor de sesión" (es decir, a nivel de aplicación). Esto significa que la caché no se ve afectada por las sesiones de usuario que van y vienen. Puede conectar un caché de terceros como caché de segundo nivel de NHibernate.

NCache es un caché distribuido extremadamente rápido y escalable linealmente para aplicaciones .NET. NCache le permite agregar más servidores de caché para manejar mayores cargas de transacciones. Puedes enchufar NCache como caché de segundo nivel de NHibernate.

Configuración NCache como caché de segundo nivel de NHibernate

Como parte de la arquitectura del proveedor de caché de segundo nivel de NHibernate, NCache ha implementado ICacheProvider y ICacheinterfaces. Como resultado, puede configurar NCache como NHibernate Second Level Cache sin necesidad de programación y simplemente mediante cambios en el archivo de configuración.

Simplemente modifica tu app.config y especificar NCache como su proveedor de caché de segundo nivel y agregue una propiedad para ello. También habilita el almacenamiento en caché de segundo nivel y otros subcachés de NHibernate en app.config. He aquí un ejemplo de app.config cambios:

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

Configurar regiones almacenables en caché

NCache permite que cada región de NHibernate se configure de manera diferente con sus propias propiedades para almacenar en caché objetos. Para este propósito NCache tiene un archivo de configuración llamado NCacheNHibernate.xml, que contiene todas las configuraciones de región utilizadas por NHibernate Second Level Cache. A continuación se muestra un ejemplo de ese archivo de configuración:

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

Configurar la sincronización de la base de datos

NCache es un potente caché distribuido para .NET y proporciona muchas funciones enriquecidas. Una de estas características es la sincronización de la base de datos, donde el caché realiza un seguimiento de los cambios de la base de datos e invalida un elemento almacenado en caché o lo recarga si sus datos correspondientes cambian en la base de datos.

Puede configurar el proveedor de caché de segundo nivel de NHibernate para NCache para utilizar la sincronización de la base de datos. solo modificar NCacheNHibernate.xml archivo de configuración de la siguiente manera:

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

Configurar caché de consultas de NHibernate

NHibernate proporciona una función de almacenamiento en caché de consultas donde almacena en caché los resultados de las consultas en el caché de segundo nivel. Puede habilitar NHibernate Query Cache en app.config archivos de configuración de la siguiente manera:

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

La consulta junto con las claves principales de los conjuntos de resultados se almacena en una región de consulta predeterminada denominada NHibernate.Cache.StandardQueryCache. Sin embargo, los objetos recuperados como resultado de la consulta se almacenan en caché en sus respectivas regiones. Además, habilitar la caché de consultas no almacena en caché cada consulta de forma predeterminada. En su lugar, debe configurar cada consulta como almacenable en caché en el código de la siguiente manera:

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

Beneficios de NCache como caché de segundo nivel de NHibernate

Si su aplicación NHibernate se ejecuta en un entorno de servidores múltiples, entonces necesita un caché distribuido como NCache como proveedor de caché de segundo nivel de NHibernate por los siguientes motivos:

  • Escalabilidad lineal: Puede escalar su aplicación linealmente agregando más servidores de caché a medida que aumenta la carga de transacciones. Esto aumenta tanto su capacidad de transacciones como su capacidad de almacenamiento.
  • Caché verdaderamente elástica: NCache es una caché verdaderamente elástica con una arquitectura de agrupación de caché de igual a igual y un rico conjunto de topologías de caché como caché reflejada, replicada, particionada y de partición-réplica. Esto le permite garantizar un 100% de tiempo de actividad y sin pérdida de datos. Obtienes todo esto automáticamente cuando usas NCache con NHibernate.
  • Sincronización de base de datos: Puede sincronizar el caché con la base de datos (SQL Server, Oracle y OLEDB), de modo que si algún dato en la base de datos cambia, el caché invalida o recarga sus elementos almacenados en caché correspondientes. Esto garantiza que su caché esté siempre actualizado. Puede habilitar esta función con NHibernate, como se muestra arriba.
  • Operaciones asincrónicas: NCache tiene operaciones asíncronas donde su aplicación no tiene que esperar ni siquiera a que se actualice el caché. Puede habilitar esto con NHibernate.
  • Serialización compacta: NCache tiene su propia serialización que es mucho más rápida que la serialización .NET normal. Puede habilitar esto sin ningún cambio de código. NCache en realidad genera código de serialización en el momento de la inicialización, lo compila en la memoria y lo usa para operaciones de serialización/deserializar. Puede mezclar y combinar esto con la serialización .NET normal.

¿Qué hacer a continuación?

© Copyright Alachisoft 2002 - Todos los derechos reservados. NCache es una marca registrada de Diyatech Corp.