Cache di secondo livello di Entity Framework con NCache

Entity Framework è un framework Microsoft di mapping relazionale a oggetti per .NET, ampiamente collaudato. Consente di lavorare con dati relazionali tramite oggetti di dominio. Inoltre, elimina la necessità di scrivere gran parte del codice di persistenza del database che altrimenti sarebbe necessario.

Entity Framework viene utilizzato in applicazioni ad alto numero di transazioni, dove prestazioni e scalabilità sono fondamentali. Tuttavia, nella maggior parte di queste applicazioni, il database diventa rapidamente un collo di bottiglia. Poiché, a differenza del livello applicativo, in cui è possibile aggiungere più server applicativi in ​​base alle esigenze di scalabilità, non è possibile fare lo stesso con il livello database.

L'unico modo per ottenere questa scalabilità è con una cache distribuita come NCacheSi tratta di una cache distribuita estremamente veloce e scalabile per applicazioni .NET. Consente di memorizzare nella cache i dati delle applicazioni, ridurre i costosi interventi sul database e migliorare le prestazioni e la scalabilità delle applicazioni.

Entity Framework Second Level Cache (L2 Cache) è un modello di caching che preserva i dati in diversi contesti di database e sessioni utente. Sebbene Entity Framework 6.x (Classic) non lo fornisca in modo nativo, NCache Si integra come provider ADO.NET personalizzato. Ciò consente di trasferire le query a un cluster distribuito, garantendo scalabilità lineare e uptime del 100% senza modificare il codice.

Perché usare NCache come cache di secondo livello di Entity Framework?

Se l'applicazione Entity Framework è in esecuzione in un ambiente multi-server, è necessaria una cache distribuita come cache di secondo livello di Entity Framework. E, NCache è un'opzione ideale per configurazioni multi-server e dovresti utilizzarla per i seguenti motivi:

  1. NCache è estremamente veloce: NCache offre tempi di risposta inferiori al millisecondo.
  2. NCache fornisce scalabilità lineare: NCache non diventa mai un collo di bottiglia della scalabilità. Ti consente di aggiungere server al cluster di cache per ottenere una scalabilità lineare e gestire carichi di transazione estremi.
  3. La dimensione della cache può crescere all'infinito: NCache Fornisce il partizionamento della cache e raggruppa tutta la memoria del server cache. In questo modo, è possibile aumentare le dimensioni della cache semplicemente aggiungendo altri server al cluster.
  4. NCache replica i dati in modo intelligente: NCache consente di replicare in modo intelligente la cache senza compromettere le prestazioni. In questo modo, non si perderanno dati della cache anche in caso di inattività di un server cache.
  5. NCache ti offre il 100% di operatività: NCache Dispone di un cluster di cache dinamica auto-riparante senza singoli punti di errore. Di conseguenza, consente di aggiungere o rimuovere server di cache in fase di esecuzione senza arrestare l'applicazione o la cache.

Scenari ideali per la memorizzazione nella cache EF L2:

  • Dati di riferimento: Memorizzazione nella cache delle tabelle di ricerca statiche (ad esempio, Prodotti, Paesi) per eliminare letture SQL ridondanti.
  • Operazioni di lettura ad alto traffico: Riduzione del carico del database per le pagine di catalogo o di elenco.
  • Dati indipendenti dalla sessione: Condivisione dello stato su più server Web in cui la memorizzazione nella cache InProc standard non riesce.

Come configurare NCache come cache di secondo livello di Entity Framework (Nessun codice richiesto)

La cosa migliore dell'uso NCache con Entity Framework è che non è richiesta alcuna programmazione da parte tua. Devi semplicemente modificare i file di configurazione della tua applicazione aggiungendo un intercettore nel sezione e sovrascrivendo le configurazioni invariantName e type. Ecco un esempio di app.config modifiche:

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

Usa la modalità di analisi e la modalità di memorizzazione nella cache

Migliori NCache Il provider di cache di secondo livello di Entity Framework si integra come provider ADO.NET personalizzato. Questo provider consente l'esecuzione in modalità di analisi, registrando tutte le diverse query inviate dall'applicazione a Entity Framework. Queste query vengono registrate in un file insieme al conteggio delle volte in cui la query è stata chiamata durante questa modalità di analisi. Di seguito è riportato un esempio:

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

Ciò ti consente di determinare quali query desideri memorizzare nella cache e per quanto tempo. Puoi anche specificare la sincronizzazione del database per alcune o tutte le tue query.

NCache Funzionalità per la cache di secondo livello di Entity Framework

Collegando NCache Provider di cache di secondo livello di Entity Framework: tramite modifiche ad app.config, otterrai una cache distribuita di livello aziendale per la tua applicazione. Di seguito sono riportate alcune funzionalità. NCache fornisce app Entity Framework.

  1. Sincronizza la cache con il database: Alcuni dati presenti nella cache potrebbero cambiare nel database senza che l'applicazione ne sia a conoscenza. Per tali dati, è possibile specificare le classi corrispondenti per NCache sincronizzazione del database caratteristica. Ciò consente NCache per poi connettersi al database, monitorare le modifiche ai dati e aggiornare automaticamente la cache. Ciò garantisce che i dati nella cache siano sempre sincronizzati con il database. NCache fornisce Dipendenza Sql per SQL Server, Dipendenza Oracle per Oracle e Dipendenza Db per tutti i database compatibili con OLEDB.
  2. Scadenza assoluta: Scadenza assoluta in NCache è specificato separatamente per ogni elemento memorizzato nella cache. Utilizza un valore data-ora per determinare quando NCache invalida automaticamente l'elemento. Per Entity Framework, NCache chiede di specificare un valore "intervallo" e poi utilizza la formula "Now() + intervallo" per calcolare il valore data-ora per la scadenza assoluta.
  3. Scadenza scorrevole: Scadenza scorrevole in NCache è specificato separatamente per ogni elemento memorizzato nella cache ed è un valore di intervallo. NCache fa scadere l'elemento memorizzato nella cache se non è stato né recuperato né aggiornato per questo intervallo. È possibile specificare questo intervallo tramite NCache File di configurazione del provider della cache di secondo livello di Entity Framework.
  4. Serializzazione compatta: Ogni volta che un oggetto .NET viene memorizzato in una cache out-of-process o distribuita, deve prima essere serializzato. La serializzazione .NET standard è lenta perché utilizza .NET Reflection in fase di esecuzione. NCache fornisce un modo per registrare le tue lezioni NCachee genera codice di serializzazione quando l'applicazione si connette alla cache. Quindi compila questo codice in memoria e lo utilizza per la serializzazione. Questa è quasi 10 volte più veloce della normale serializzazione .NET. È possibile utilizzare questa funzionalità con Entity Framework, registrando le classi entità con NCache per la serializzazione compatta.

utilizzando NCache Direttamente dalle applicazioni Entity Framework

Anche se, usando NCache poiché la cache di secondo livello di Entity Framework è molto veloce e semplice, fornisce solo un set limitato di NCache caratteristiche. La ragione di ciò è questa NCache è vincolato dal fatto che è collegato come provider ADO.NET personalizzato e deve gestire il livello di query SQL. Esistono numerosi NCache funzionalità che non potrai utilizzare se decidi di utilizzarlo come provider di cache di secondo livello di Entity Framework.

L'alternativa per te è usare NCache direttamente dall'interno dell'applicazione Entity Framework rendendo NCache API chiamate come tutte le altre applicazioni .NET non Entity Framework. Sebbene questo percorso richieda un piccolo sforzo di programmazione, si potrebbe decidere che i vantaggi superino lo sforzo di programmazione aggiuntivo.

NCache Funzionalità mancanti nella cache di secondo livello di Entity Framework

Di seguito è riportato un elenco di funzionalità che ti mancherebbero se lo utilizzassi come cache di secondo livello di Entity Framework rispetto a se lo utilizzassi NCache direttamente dalla tua applicazione.

Categoria di caratteristiche Caratteristica Fornitore di caching EF (senza codice) NCache API diretta
Operazioni avanzate Operazioni di massa non Disponibile Disponibile
Raggruppamento e ricerca Tags and Tag con nome non Disponibile Disponibile
Interrogazione SQL e ricerca LINQ non Disponibile Disponibile
Concorrenza Blocco e sbloccare gli oggetti non Disponibile Disponibile
Integrità Controllo delle versioni degli elementi della cache non Disponibile Disponibile
Fonte di dati Lettura / Scrivere attraverso / Scrivi dietro non Disponibile Disponibile
Messaging Notifiche di eventi (Articolo, Generale, Personalizzato) non Disponibile Disponibile
Manutenzione Caricatore di cache e aggiornamento non Disponibile Disponibile

Cosa fare dopo?

Domande frequenti (FAQ)

NCache Implementa un provider ADO.NET personalizzato che integra il provider standard di Entity Framework. Intercetta le query del database generate da Entity Framework e memorizza i relativi set di risultati nella cache distribuita. Se la stessa query viene eseguita nuovamente, il risultato viene fornito direttamente dalla cache, bypassando il database.

No, usando NCache poiché una cache di secondo livello di Entity Framework non richiede alcuna modifica al codice. È sufficiente modificare il file app.config o web.config per registrare NCache provider e configurare l'intercettore.

Sì. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. NCache Supporta la sincronizzazione del database tramite SqlDependency (per SQL Server), OracleDependency e DbDependency. Questo garantisce che, se i dati vengono aggiornati nel database da un'applicazione di terze parti, gli elementi della cache corrispondenti vengano automaticamente invalidati per evitare dati obsoleti.

No, questo provider specifico è progettato per Entity Framework 6.x (Classic). Per le applicazioni .NET Core, utilizzare il NCache Entity Framework Core (EF Core) Caching Provider, che supporta funzionalità avanzate come metodi di estensione e opzioni di caching personalizzate.

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