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.
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>
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>
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>
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);
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: