Caché de segundo nivel de NHibernate

NHibernate es un popular marco de mapeo relacional de objetos (ORM) para Aplicaciones .NET, que permite interacciones fluidas con bases de datos mediante código orientado a objetos. Sin embargo, cuando las aplicaciones gestionan un alto volumen de transacciones, suelen experimentar cuellos de botella en el rendimiento debido a las frecuentes consultas a la base de datos.

Para solucionar esto, NHibernate proporciona almacenamiento en caché de segundo nivel, que mantiene los objetos en la memoria en el nivel de la aplicación, lo que reduce la necesidad de acceder repetidamente a la base de datos. NCache, un caché distribuido extremadamente rápido y escalable, actúa como un Caché de segundo nivel de NHibernate proveedor, lo que mejora significativamente la velocidad, la escalabilidad y la confiabilidad de la aplicación.

NCache Proporciona una caché de segundo nivel (L2) distribuida y de alto rendimiento para NHibernate que elimina los cuellos de botella de las bases de datos en aplicaciones .NET. Ofrece escalabilidad lineal, un 100 % de tiempo de actividad mediante agrupación punto a punto y no requiere cambios de código para su integración.

¿Cómo NCache ¿Mejorar el rendimiento de la aplicación NHibernate?

NCache Mejora NHibernate con consultas más rápidas, carga de base de datos reducida y alta disponibilidad como se explica a continuación.

  • Actuación: El almacenamiento en memoria de datos de acceso frecuente reduce las visitas a la base de datos hasta en un 90 %, lo que agiliza la ejecución de consultas y mejora la capacidad de respuesta. Esto elimina los puntos de estrangulamiento de la base de datos, donde la base de datos no puede gestionar el volumen de solicitudes de lectura repetidas de varios servidores web, lo que permite que la capa de aplicación escale linealmente manteniendo la carga de la base de datos al mínimo. Las pruebas de rendimiento internas muestran... NCache Puede manejar más de 2 millones de operaciones por segundo con una latencia de submilisegundos.
    • Caché de cliente: Permite que las aplicaciones accedan al subconjunto más utilizado de los datos almacenados en caché desde su propia memoria, lo que reduce las llamadas de red y mejora aún más el rendimiento.
    • Serialización compacta: NCache garantiza una serialización y deserialización eficientes con Serialización compacta, lo que hace que la recuperación de datos sea significativamente más rápida que la serialización .NET estándar.
  • Escalabilidad lineal: NCache Permite que las aplicaciones escalen dinámicamente añadiendo más servidores de caché. También garantiza que la carga de caché se distribuya uniformemente en un entorno agrupado.
  • Alta disponibilidad: NCacheLa agrupación en clústeres punto a punto elimina el tiempo de inactividad, mientras que la conmutación por error y la replicación automáticas evitan la pérdida de datos y mantienen la consistencia de la caché. NCache Ofrece replicación de datos inteligente a través de múltiples topologías de almacenamiento en caché, que incluyen:
    • Caché de réplica de partición: Mantiene copias redundantes de datos almacenados en caché en todas las particiones para evitar la pérdida de datos.
    • Caché reflejada: Proporciona un mecanismo de respaldo sincrónico para conmutación por error en tiempo real.
    • Caché replicado: Garantiza la disponibilidad de datos al distribuir el mismo caché entre múltiples nodos del clúster.
  • Casos de uso comunes para NCache Caché L2 de NHibernate:
    • Granjas web de alto tráfico: Escalar aplicaciones .NET en múltiples servidores sin contención de bases de datos.
    • Consistencia de datos en tiempo real: Uso de la dependencia SQL para sincronizar el caché con los cambios de la base de datos externa.
    • Modernización del sistema heredado: Mejora del rendimiento de las aplicaciones NHibernate existentes con un proveedor plug-and-play.

Comparación técnica: NHibernate L1 vs. NCache L2

Elemento NHibernate L1 (caché de sesión) NCache (Caché L2 distribuida)
Alcance y aislamiento Con alcance transaccional. Los datos se aíslan en un único ISesión objeto. A nivel de proceso/clúster. Los datos se comparten entre todas las sesiones y servidores de la granja web.
Persistencia de datos Efímero. Los objetos se eliminan en cuanto se cierra la sesión o finaliza la solicitud. Persistencia en memoria. Los datos residen en el clúster de caché independientemente de los reinicios de aplicaciones o cierres de sesiones.
Escalabilidad organizacional Solo en proceso. Limitado por la memoria de un solo servidor web; no se puede compartir entre varias granjas. Escalabilidad lineal. Puede agregar servidores de caché dinámicamente para aumentar la capacidad de almacenamiento y el rendimiento.
Sincronización de base de datos Ninguno. L1 no tiene ningún mecanismo para saber si otro proceso actualizó la base de datos. Sincronización automática. Usos Dependencia de caché SQL, Dependencia de Oracle o Sondeo para invalidar datos obsoletos.
Almacenamiento en caché de consultas No aplicable (L1 es principalmente para búsquedas basadas en ID). Compatible. Almacena en caché los resultados de consultas complejas para evitar repetidas y costosas ejecuciones de SQL.

Características principales de NCache para NHibernate

A continuación se presentan algunas de las características clave que NCache ofrece a los usuarios de NHibernate:

No se requiere cambio de código

  • Se integra fácilmente con NHibernate como una solución plug-and-play sin modificar el código de aplicación existente.
  • Todas las configuraciones se gestionan a través de archivos de configuración basados ​​en XML.

Varias regiones almacenables en caché

  • Prioridad de elementos de caché:Asigne diferentes niveles de prioridad (Alto, Normal, Bajo) a los datos almacenados en caché, lo que garantiza que los objetos a los que se accede con frecuencia permanezcan en la caché por más tiempo.
  • Caducidad absolutaLas entradas de caché caducan a una hora fija. Esto garantiza que los datos obsoletos se eliminen automáticamente, independientemente de la frecuencia de acceso.
  • Caducidad móvil:La expiración se restablece al acceder, lo que lo hace ideal para datos utilizados con frecuencia pero dinámicos.
  • Configuración basada en regiones: Personalice el comportamiento del almacenamiento en caché para diferentes regiones de datos mediante el NCacheArchivo de configuración NHibernate.xml.
<configuration>
  <application-config application-id="myapp"
                      enable-cache-exception="true"
                      default-region-name="default"
                       key-case-sensitivity="false" >
    <cache-regions>
      <region name="AbsoluteExpirationRegion"
              cache-name="demoCache"
              priority="Default"
              expiration-type="sliding"
              expiration-period="180" />
          <region name="default" 
              cache-name="demoCache" 
              priority="default"
              expiration-type="none" 
              expiration-period="0"/>
    </cache-regions>
  </application-config>
</configuration>

¿Cómo NCache ¿Mantener los datos de NHibernate sincronizados con la base de datos?

  • Supervisa los cambios en la base de datos para mantener los datos almacenados en caché actualizados.
  • Funciona perfectamente con bases de datos basadas en SQL Server, Oracle y OLEDB.
  • Usos Invalidación basada en dependencias de SQL para eliminar o actualizar datos obsoletos en caché.
<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="dependency.customer: [us]"/>
    </database-dependencies>
  </application-config>
</configuration>

Caché de consultas de NHibernate

  • Almacenamiento en caché de resultados de consultas:Almacena en caché los resultados de las consultas para reducir las ejecuciones repetidas de las mismas consultas de base de datos.
  • Almacenamiento de consultas:Almacena consultas en la región NHibernate.QueryCache para búsquedas más rápidas.
  • Operaciones asíncronas:Actualiza la caché sin bloqueo, lo que garantiza que la ejecución de la aplicación no se demore.
  • Operaciones de sincronización:Actualiza o invalida instantáneamente los datos almacenados en caché cuando se producen cambios en la base de datos, manteniendo la consistencia de los datos.

Habilitar el almacenamiento en caché de consultas en el código de la aplicación

Este ejemplo muestra cómo habilitar el almacenamiento en caché de consultas de NHibernate con NCache para almacenar y reutilizar los resultados de la consulta para mejorar el rendimiento.

using (var session = sessionFactory.OpenSession())
{
    using (var transaction = session.BeginTransaction())
    {
        IQuery query = session.CreateQuery("FROM Customer c")
                              .SetCacheable(true);
        var customers = await query.ListAsync<Customer>();

        var newCustomer = new Customer { Name = "John Doe" };
        await session.SaveAsync(newCustomer);

        await session.FlushAsync();
        transaction.Commit();
    }
}

Cómo configurar NCache con NHibernate?

Instale NCache Cliente para NHibernate

  • Instale la NCache Proveedor de NHibernate para empresas a través de NuGet:
    Install-Package NHibernate.NCache

Instale NCache Server

Configurar NCache para NHibernate

Modifique sus archivos de configuración de NHibernate para habilitar NCache como proveedor de caché de segundo nivel.

Actualizar hibernate.cfg.xml

<hibernate-configuration xmlns="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>

¿Qué hacer a continuación?

Preguntas frecuentes

NCache Proporciona una alternativa distribuida y multinodo a la caché principal (L1) predeterminada de NHibernate. Si bien L1 está limitada a una sola sesión, NCache permite que su aplicación comparta datos en caché en toda una granja web, lo que reduce los viajes a la base de datos hasta en un 90% y evita cuellos de botella en la base de datos durante el tráfico pico.

Sí. NCache Es totalmente compatible con el almacenamiento en caché de consultas de NHibernate, que almacena los resultados de consultas SQL costosas en la caché distribuida. Esto garantiza que las ejecuciones posteriores de la misma consulta con los mismos parámetros no afecten a la base de datos, lo que reduce significativamente la latencia de la aplicación.

NCache mantiene una consistencia de datos del 100% a través de las funciones de sincronización de la base de datos. Al utilizar la dependencia SQL (SqlCacheDependency) o la dependencia Oracle, NCache invalida y elimina automáticamente elementos obsoletos en caché cada vez que cambian los datos de la base de datos subyacente, lo que garantiza que su aplicación siempre brinde la información más actualizada.

No se requieren cambios de código. NCache es un proveedor de caché L2 listo para usar. La integración se gestiona completamente mediante la configuración, modificando su... hibernación.cfg.xml or aplicación.config archivo para apuntar al NCache fábrica de proveedores.

Para la mayoría de los entornos NHibernate, se recomienda la topología de partición-réplica, ya que ofrece el mejor equilibrio entre rendimiento y alta disponibilidad. Para cargas de trabajo con uso intensivo de lectura, se puede habilitar la función de caché de cliente (en proceso) para proporcionar velocidades cercanas a las de la caché, almacenando un subconjunto de datos directamente en la memoria de la aplicación.

Contáctenos

TELÉFONO

+1 214-619-2601 (EE.UU.)

+44 20 7993 8327 (Reino Unido)

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