NHibernate è una popolare soluzione di mappatura relazionale a oggetti (ORM) per applicazioni .NET perché semplifica la programmazione del database. Di conseguenza, molte applicazioni ad alto traffico utilizzano NHibernate e, quindi, devono affrontare colli di bottiglia di scalabilità nel database.
Per far fronte a questo, NHibernate fornisce un'infrastruttura di memorizzazione nella cache in modo che le applicazioni possano utilizzare invece un cache store in memoria e prevenire l'esaurimento dei loro database con un carico di richieste così elevato. La memorizzazione nella cache di NHibernate include la cache di primo livello e la cache di secondo livello.
NCache Dettagli Hibernate Caching-Docs Utilizzo di Dapper Micro-ORM con NCache
NHibernate cache di primo livello e relative limitazioni
NHibernate First Level (1° livello) Cache fornisce una cache standalone di base (in-proc) associata all'oggetto sessione ed è limitata solo alla sessione corrente. Per impostazione predefinita, questa cache di primo livello riduce il numero di query SQL sul database per sessione. Ma ci sono molte limitazioni con questa cache di primo livello, come segue:
- Ogni processo ha la propria cache di 1° livello che non è sincronizzata con altre cache di 1° livello, rendendo l'integrità dei dati un problema.
- La dimensione della cache è limitata alla memoria di processo e non può essere ridimensionata.
- Il riciclo dei processi di lavoro provoca lo svuotamento della cache. Quindi, devi ricaricarlo, il che riduce le prestazioni dell'applicazione.
NCache Dettagli Sincronizza DB con NHibernate Memorizzazione nella cache delle query NHibernate
Soluzione: una cache distribuita per NHibernate
La cache di secondo livello di NHibernate esiste nella Session Factory livello, il che significa che più sessioni utente possono accedere a una cache condivisa. Inoltre, la cache di secondo livello di NHibernate ha un'architettura plug-in in modo da poter inserire una cache distribuita di terze parti senza alcuna programmazione. NCache ha implementato Provider di cache di secondo livello NHibernate e puoi usarlo come cache distribuita per NHibernate senza modifiche al codice.
L'esempio seguente mostra come utilizzare NCache nella tua applicazione NHibernate come cache di 2° livello:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<hibernate-configuration> <session-factory> <property name="cache.provider_class">Alachisoft.NCache.Integrations.NHibernate.Cache.NCacheProvider, Alachisoft.NCache.Integrations.NHibernate.Cache </property> <property name="proxyfactory.factory_class"> NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate </property> <property name="cache.use_second_level_cache">true </property> </session-factory> </hibernate-configuration> <ncache> <cache-regions> <region name="AbsoluteExpirationRegion" cache-name="myCache" priority="Default" expiration-type="sliding" expiration-period="180" use-async="false"> <region name="default" cache-name="myCache" priority="default" expiration-type="none" expiration-period="0"> </region></region></cache-regions> </ncache> |
Ecco alcuni vantaggi di NCache come cache di 2° livello di NHibernate:
- NCache sincronizza tra processi e server: NCache è una cache condivisa su più server. Ciò garantisce che la cache sia coerente su più server e che tutti gli aggiornamenti della cache siano sincronizzati correttamente, evitando problemi di integrità dei dati.
- Dimensione della cache scalabile: NCache raggruppa insieme la memoria di tutti i server cache. Pertanto, puoi aumentare la dimensione della cache semplicemente aggiungendo più server al cluster di cache. Ciò significa che la tua cache può crescere fino a 100 gigabyte e persino terabyte.
- Il riciclaggio del processo dell'applicazione non influisce sulla cache: I processi dell'applicazione diventano stateless poiché tutti i dati si trovano in una cache distribuita out-proc. Pertanto, il riciclo del processo applicativo non ha alcun impatto sulla cache.
- Scalabilità lineare per gestire carichi di transazione maggiori: Puoi gestire carichi di transazioni maggiori senza preoccuparti che il tuo database diventi un collo di bottiglia. Questa prestazione è possibile perché la cache distribuita si ridimensiona in modo lineare e riduce il traffico del database fino al 90%.
- Utilizza la cache del client per archiviare i dati In-proc: NCache fornisce supporto per la cache del client, una cache locale sincronizzata o una cache in cima a una cache, che viene eseguita all'interno del processo di lavoro. Puoi usarlo per ottenere maggiori prestazioni all'interno delle tue applicazioni NHibernate.
NCache Dettagli Ibernazione e NCache Usa il NHibernate Cache-Video
Conclusione!
Come puoi vedere, una cache distribuita come NCache ti consente di usare NHibernate e continuare a eseguire la tua applicazione in una configurazione multi-server. Puoi anche ridimensionare la tua applicazione e gestire carichi di transazioni elevati utilizzando NCache come cache di secondo livello di NHibernate. Scarica una versione di prova di 60 giorni completamente funzionante di NCache Enterprise e provalo tu stesso.