Caché de segundo nivel de Entity Framework con NCache

Entity Framework es un framework de mapeo relacional de objetos de Microsoft para .NET de eficacia probada. Permite trabajar con datos relacionales mediante objetos de dominio. Además, elimina la necesidad de escribir la mayor parte del código de persistencia de bases de datos que de otro modo sería necesario.

Entity Framework se utiliza en aplicaciones con un alto volumen de transacciones, donde el rendimiento y la escalabilidad son cruciales. Sin embargo, en la mayoría de estas aplicaciones, la base de datos se convierte rápidamente en un cuello de botella. A diferencia de la capa de aplicación, donde se pueden agregar más servidores de aplicaciones según sea necesario para escalar, no es posible hacer lo mismo con la capa de base de datos.

La única forma de lograr esta escalabilidad es con caché distribuida como NCacheEs una caché distribuida extremadamente rápida y escalable para aplicaciones .NET. Permite almacenar en caché los datos de la aplicación, reducir las costosas visitas a la base de datos y mejorar el rendimiento y la escalabilidad de la aplicación.

La caché de segundo nivel de Entity Framework (caché L2) es un patrón de almacenamiento en caché que preserva los datos en diferentes contextos de bases de datos y sesiones de usuario. Si bien Entity Framework 6.x (Classic) no la ofrece de forma nativa, NCache Se integra como un proveedor ADO.NET personalizado. Esto permite transferir consultas a un clúster distribuido, garantizando una escalabilidad lineal y un tiempo de actividad del 100 % sin modificar el código.

Por qué usar NCache ¿Como caché de segundo nivel de Entity Framework?

Si su aplicación Entity Framework se ejecuta en un entorno multiservidor, necesitará una caché distribuida como caché de segundo nivel de Entity Framework. NCache es una opción ideal para configuraciones de múltiples servidores y deberías usarla por las siguientes razones:

  1. NCache es extremadamente rápido: NCache Le proporciona tiempos de respuesta de submilisegundos.
  2. NCache proporciona escalabilidad lineal: NCache nunca se convierte en un cuello de botella de escalabilidad. Le permite agregar servidores al clúster de caché para lograr escalabilidad lineal y manejar cargas de transacciones extremas.
  3. El tamaño de la caché puede crecer infinitamente: NCache Proporciona particionamiento de caché y agrupa toda la memoria del servidor de caché. Por lo tanto, puede aumentar el tamaño de la caché simplemente añadiendo más servidores al clúster.
  4. NCache replica datos de forma inteligente: NCache Permite replicar la caché de forma inteligente sin comprometer el rendimiento. Por lo tanto, no perderá datos de la caché incluso si un servidor de caché falla.
  5. NCache le da 100% de tiempo de actividad: NCache Cuenta con un clúster de caché dinámico con autorreparación sin un solo punto de fallo. Por lo tanto, permite agregar o eliminar servidores de caché en tiempo de ejecución sin detener la aplicación ni la caché.

Escenarios ideales para el almacenamiento en caché L2 de EF:

  • Dato de referencia: Almacenamiento en caché de tablas de búsqueda estáticas (por ejemplo, productos, países) para eliminar lecturas SQL redundantes.
  • Operaciones de lectura de alto tráfico: Reducir la carga de la base de datos para páginas de catálogo o listado.
  • Datos independientes de la sesión: Compartir estado entre múltiples servidores web donde el almacenamiento en caché InProc estándar falla.

Cómo configurar NCache como caché de segundo nivel de Entity Framework (No se requiere código)

Lo mejor de usar NCache Con Entity Framework, no se requiere programación. Simplemente modifica los archivos de configuración de tu aplicación agregando un interceptor en el... sección y sobrescribiendo las configuraciones de invariantName y type. Aquí hay un ejemplo de aplicación.config cambios:

<entityFramework>
    <providers>
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
    <interceptors>
        <interceptor type="Alachisoft.NCache.Integrations.EntityFramework.Caching.EFCommandInterceptor, Alachisoft.Integrations.EntityFramework.CachingProvider"/>
    </interceptors>
</entityFramework>

Usar el modo de análisis y el modo de almacenamiento en caché

El NCache El proveedor de caché de segundo nivel de Entity Framework se integra como un proveedor ADO.NET personalizado. Este proveedor permite ejecutar en modo de análisis, donde registra todas las consultas que la aplicación emite en Entity Framework. Estas consultas se registran en un archivo junto con el número de veces que se llamaron durante este modo de análisis. A continuación, se muestra un ejemplo:

<analysis-report>
 <query>
      <!--Call count = 12-->
      <cache-query query-text="SELECT [Extent1].[ProductID] AS [ProductID], 
		[Extent1].[ProductName] AS [ProductName], 
		[Extent1].[SupplierID] AS [SupplierID], 
		[Extent1].[CategoryID] AS [CategoryID], 
		[Extent1].[QuantityPerUnit] AS [QuantityPerUnit], 
		[Extent1].[UnitPrice] AS [UnitPrice], 
		[Extent1].[UnitsInStock] AS [UnitsInStock], 
		[Extent1].[UnitsOnOrder] AS [UnitsOnOrder], 
		[Extent1].[ReorderLevel] AS [ReorderLevel], 
		[Extent1].[Discontinued] AS [Discontinued] FROM 
		[dbo].[Products] AS [Extent1] 
		WHERE 5 = [Extent1].[ProductID]"/>
      <cache-policy vary-by-cache-param="" 
		expiration-type="Absolute" 
		enabled="True" 
		expiration-time="30sec" 
		dbsyncdependency="False" 
		resyncProviderName="EFResync"/>
    </query>
</analysis-report>

Esto le permite determinar qué consultas desea almacenar en caché y durante cuánto tiempo. También puede especificar la sincronización de la base de datos para algunas o todas sus consultas.

NCache Características de la caché de segundo nivel de Entity Framework

Al enchufar NCache Mediante cambios en app.config, obtendrá una caché distribuida de nivel empresarial para su aplicación. A continuación, se presentan algunas características. NCache proporciona aplicaciones de Entity Framework.

  1. Sincronizar caché con base de datos: Algunos datos almacenados en la caché pueden cambiar en la base de datos sin que la aplicación lo sepa. Para estos datos, puede especificar las clases correspondientes. NCache sincronización de base de datos característica. Esto permite NCache Para luego conectarse a la base de datos, monitorear los cambios en los datos y actualizar la caché automáticamente. Esto garantiza que los datos de la caché estén siempre sincronizados con la base de datos. NCache proporciona Dependencia Sql para SQL Server, OracleDependencyOracleDependency para Oracle, y Dependencia de base de datos para cualquier base de datos compatible con OLEDB.
  2. Caducidad absoluta: Caducidad absoluta in NCache Se especifica por separado para cada elemento almacenado en caché. Utiliza un valor de fecha y hora para determinar cuándo NCache invalida automáticamente el elemento. Para Entity Framework, NCache le pide que especifique un valor de "intervalo" y luego utiliza la fórmula "Ahora() + intervalo" para calcular el valor de fecha y hora para la expiración absoluta.
  3. Caducidad variable: Caducidad móvil in NCache se especifica por separado para cada elemento almacenado en caché y es un valor de intervalo. NCache Caduca el elemento almacenado en caché si no se ha recuperado ni actualizado durante este intervalo. Puede especificar este intervalo mediante el NCache Archivo de configuración del proveedor de caché de segundo nivel de Entity Framework.
  4. Serialización compacta: Siempre que un objeto .NET se almacena en caché fuera de proceso o distribuida, primero debe serializarse. La serialización .NET normal es lenta porque utiliza .NET Reflection en tiempo de ejecución. NCache proporciona una manera para que pueda registrar sus clases con NCacheGenera código de serialización cuando la aplicación se conecta a la caché. Luego, compila este código en memoria y lo utiliza para la serialización. Esto es casi 10 veces más rápido que la serialización .NET estándar. Puedes usar esta función con Entity Framework, registrando tus clases de entidad con... NCache para serialización compacta.

El uso de NCache Directamente desde las aplicaciones de Entity Framework

Aunque, usando NCache Como el caché de segundo nivel de Entity Framework es muy rápido y fácil, solo le proporciona un conjunto limitado de NCache características. La razón de esto es que NCache Está limitado por el hecho de que está conectado como un proveedor ADO.NET personalizado y debe gestionar consultas SQL. Existen numerosos NCache características que no podrá utilizar si decide usarlo como proveedor de caché de segundo nivel de Entity Framework.

La alternativa para ti es usar NCache directamente desde su aplicación Entity Framework haciendo NCache API Llama como cualquier otra aplicación .NET que no sea Entity Framework. Si bien este camino requiere un pequeño esfuerzo de programación, podría considerar que los beneficios compensan el esfuerzo adicional.

NCache Características faltantes en la caché de segundo nivel de Entity Framework

A continuación se muestra una lista de características que extrañaría si lo usara como Caché de segundo nivel de Entity Framework versus si usara NCache directamente desde su aplicación.

Categoría de característica Elemento Proveedor de almacenamiento en caché de EF (sin código) NCache API directa
Operaciones avanzadas Operaciones masivas no disponible Disponible
Agrupación y búsqueda Etiquetas y Etiquetas con nombre no disponible Disponible
Consulta SQL y búsqueda LINQ no disponible Disponible
Concurrencia Cerraduras y desbloquear objetos no disponible Disponible
Integridad Control de versiones de elementos de caché no disponible Disponible
Fuente de datos Leer de parte a parte / Escriba por medio de / escribir detrás no disponible Disponible
Mensajes Notificaciones de eventos (Artículo, General, Personalizado) no disponible Disponible
Mantenimiento Cargador de caché y actualización no disponible Disponible

¿Qué hacer a continuación?

Preguntas frecuentes

NCache Implementa un proveedor ADO.NET personalizado que encapsula el proveedor estándar de Entity Framework. Intercepta las consultas de base de datos generadas por EF y almacena sus resultados en la caché distribuida. Si se ejecuta la misma consulta de nuevo, el resultado se entrega directamente desde la caché, sin pasar por la base de datos.

No, usando NCache Como caché de segundo nivel de Entity Framework, no requiere cambios de código. Solo necesita modificar su archivo app.config o web.config para registrarlo. NCache proveedor y configurar el interceptor.

Sí. NCache Admite la sincronización de bases de datos mediante SqlDependency (para SQL Server), OracleDependency y DbDependency. Esto garantiza que, si una aplicación externa actualiza los datos en la base de datos, los elementos de caché correspondientes se invaliden automáticamente para evitar datos obsoletos.

No, este proveedor específico está diseñado para Entity Framework 6.x (Classic). Para aplicaciones .NET Core, utilice el NCache Proveedor de almacenamiento en caché de Entity Framework Core (EF Core), que admite funciones avanzadas como métodos de extensión y opciones de almacenamiento en caché personalizadas.

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.