Ibernazione cache di secondo livello

Hibernate è una popolare soluzione open source di mapping relazionale a oggetti per Java. Allo scopo di aumentare le prestazioni, Hibernate fornisce anche la funzione di memorizzazione nella cache. Hibernate fornisce due tipi di memorizzazione nella cache, cache di primo livello e cache di secondo livello.

La cache di primo livello è integrata e utilizzata come predefinita, ma è limitata nell'uso, non accessibile ed è solo una cache in-process. La cache di secondo livello fornisce un'architettura collegabile, il che significa che una cache di terze parti può essere utilizzata come cache di secondo livello per Hibernate.

NCache implementa il provider Hibernate Second Level Cache, alleggerendo l'esecuzione del database e riducendo al minimo il traffico SQL. Ciò consente una configurazione diretta senza modifiche al codice, garantendo all'applicazione l'accesso immediato a NCachela solida suite di funzionalità di caching distribuito.

Architettura di NCache come provider di cache di secondo livello (L2) di Hibernate tra la sessione dell'applicazione e il database.
Figura 1: NCache come provider di cache di secondo livello per l'ibernazione

Impostare NCache come cache di secondo livello per Hibernate

Impostare NCache poiché la cache di secondo livello per Hibernate è abbastanza semplice. Non sono richieste modifiche al codice effettivo. È necessario modificare solo i file di configurazione.

Ora per aggiungere NCache come cache di secondo livello per Hibernate, hibernate.cfg.xml deve essere modificato nel modo seguente:

  • 2nd La cache di livello deve essere abilitata impostando il hibernate.cache.use_second_level_cache proprietà come vera.
  • NCache deve essere configurato come provider di cache di secondo livello di Hibernate impostando il hibernate.cache.region.factory_class proprietà come JCacheRegionFactory per Hibernate 3.6 e versioni successive.

Ecco un esempio delle modifiche apportate al ibernare.cfg.xml file:

<hibernate-configuration>
  <session-factory>
    <property name="hibernate.cache.use_second_level_cache">true</property>
    <property name="hibernate.cache.region.factory_class">JCacheRegionFactory</property>
    ...
</session-factory>
</hibernate-configuration>

Configurazione delle regioni della cache

Hibernate fa uso di regioni della cache per riporre oggetti. NCache consente la configurazione di queste regioni della cache con proprietà diverse. Il NCacheIl file Hibernate.xml viene utilizzato per questo scopo. Questo file contiene tutte le impostazioni e le opzioni di configurazione per le regioni e le relative configurazioni utilizzate da NCache.

Di seguito è riportato un esempio NCacheFile di configurazione Hibernate.xml in cui sono configurate le regioni:

<configuration>
<application-config application-id="myapp" enable-cache-exception="true" default-region-name="DefaultRegion" key-case-sensitivity="false">
    <cache-regions>
        <region name="hibernator.BLL.Customer:Customer" cache-name="myPartitionedcache" priority="BelowNormal" expiration-type="Absolute" expiration-period="8"/>
        <region name="DefaultRegion" cache-name="myPartitionedcache" priority="default" expiration-type="none" expiration-period="0" />
    </cache-regions>
	...
</application-config>
</configuration>

Configurazione della sincronizzazione del database

NCache è una cache distribuita versatile, efficiente ed efficace per .NET Framework, .NET Core e Java. È dotata di un ampio set di funzionalità. Una di queste funzionalità è la sincronizzazione del database tramite Dipendenza SQL. È qui che la cache controlla il database per eventuali modifiche e ricarica o rimuove gli elementi che risultano obsoleti o ridondanti.

NCache sfrutta le notifiche del database nativo (come SQL Dependency o Oracle Dependency) per sincronizzare la cache L2 di Hibernate. Ciò garantisce che se un'applicazione di terze parti modifica il database, NCache invalida o ricarica automaticamente le entità Hibernate interessate. Per abilitare questa funzionalità, applicare le seguenti modifiche a NCacheHibernate.xml file:

<configuration>
<application-config application-id="myapp" enable-cache-exception="true" default-region-name="DefaultRegion" key-case-sensitivity="false">
  	... 
    <database-dependencies>
        <dependency entity-name="hibernator.BLL.Customer" type="oracle" sql-statement="select ContactName from Customer where CustomerID ='?'" cache-key-format="hibernator.BLL.Customer#[pk]" connection-string="Your Connection String"/>
    </database-dependencies>
</application-config>
</configuration>

Ibernazione della configurazione della cache delle query

Ibernazione fornisce una funzionalità di memorizzazione nella cache delle query. Qui i risultati delle query vengono memorizzati nella cache di secondo livello. NCache consente di memorizzare nella cache tali query utilizzando questa funzione. Questa funzione può essere abilitata modificando il file ibernare.cfg.xml file nel modo seguente:

<hibernate-configuration>
  <session-factory>
  ...
  <property name="hibernate.cache.use_query_cache">true</property>
  </session-factory>
</hibernate-configuration>

L'abilitazione della cache delle query non memorizza nella cache ogni query per impostazione predefinita. Invece le query che devono essere memorizzate nella cache devono essere impostate come memorizzabili nella cache nel codice. Per impostare una query memorizzabile nella cache, chiamare la funzione setCacheable(true) della query durante la creazione della query. Il codice seguente è un esempio che mostra una query memorizzabile nella cache:

List customerEnumerator = session.createQuery("from Customer c").setCacheable(true).list(); 

I vantaggi dell'utilizzo di NCache come cache di secondo livello per Hibernate

I seguenti sono i motivi principali per cui NCache è un'opzione adatta da utilizzare come cache di secondo livello per Hibernate quando l'applicazione è in esecuzione in un ambiente multi-server.

  • Scalabilità lineare della cache per le applicazioni Java: NCache al scalabilità lineare consentendo di aggiungere server cache al cluster in fase di esecuzione. Questa architettura aumenta sia la capacità di archiviazione che la velocità di elaborazione delle transazioni, garantendo che l'applicazione Hibernate mantenga le prestazioni anche con l'aumentare del carico di lavoro.
  • Alta disponibilità tramite topologie di caching distribuito: NCache è una cache molto flessibile, il che significa che fornisce ai suoi utenti un ricco set di topologie di memorizzazione nella cache ad esempio, Topologia speculare, Topologia replicata, Topologia della partizione e Topologia della partizione della replica. Ogni topologia soddisfa uno scenario e un'esigenza specifici, rendendola così flessibile.
  • Sincronizzazione database: Hai la possibilità di sincronizza la tua cache con il database come SQL Server, Oracle, ecc. In questo modo la cache controlla il database per eventuali modifiche e rimuove o mantiene gli elementi nella cache in base a tale modifica. Ciò garantisce che la tua cache contenga elementi sempre aggiornati.
  • Operazioni asincrone non bloccanti per latenza ridotta: Operazioni asincrone sono disponibili in NCache. Queste operazioni ti permettono di lavorare sulla tua applicazione senza aspettare che la cache venga aggiornata, rendendo tutto così veloce. Queste operazioni possono essere abilitate con Hibernate.

Cosa fare dopo?

Domande frequenti (FAQ)

Puoi configurare NCache come una cache di secondo livello di ibernazione abilitando l' hibernate.cache.use_second_level_cache proprietà nel tuo hibernate.cfg.xml e impostando il hibernate.cache.region.factory_class a JCacheRegionFactoryQuesta configurazione non richiede modifiche al codice dell'applicazione.

Sì, NCache supporta completamente la cache delle query di Hibernate. Per abilitarla, impostare hibernate.cache.use_query_cache proprietà a true nel tuo file di configurazione e contrassegna query specifiche come memorizzabili nella cache nel tuo codice Java utilizzando setCacheable(true) metodo.

NCache si sincronizza con database come SQL Server e Oracle utilizzando notifiche native del database (dipendenza SQL). Quando i dati cambiano nel database, NCache invalida o ricarica automaticamente le entità Hibernate corrispondenti nella cache distribuita per evitare dati obsoleti.

Sì, NCache è compatibile con le versioni di Hibernate dalla 3.6 alla 6.x. Utilizza lo standard JCache (JSR-107) per fornire un provider di caching distribuito che funziona su vari ambienti Java.

NCache Fornisce scalabilità lineare per le applicazioni Hibernate consentendo di aggiungere server cache al cluster in fase di esecuzione. Questa architettura distribuita aumenta sia la capacità di archiviazione che la velocità di elaborazione delle transazioni senza richiedere tempi di inattività delle applicazioni.

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