/ / Come posso interrompere Java o Hibernate Caching: java, hibernate, caching

Come posso interrompere Java o Hibernate Caching: java, hibernate, caching

Possiedo un'app per recuperare i dati dal database e controllo il tempo impiegato dall'app per recuperare i dati.

Ma ho un problema quando uso lo stesso set di input di dati per recuperare i dati con la mia app, la seconda volta il recupero richiederà molto meno tempo.

Presumo che Java o Hibernate abbia qualche cache o tempfile per salvare i dati, quindi la seconda esecuzione sarà veloce, ma non voglio che accada, ho bisogno di monitorare il tempo che impiega effettivamente, non il tempo di recupero dalla cache o dal file temporaneo.

Ho provato a vietare la cache e il file temporaneogenerare nel pannello di controllo di Java, ho provato a disabilitare la cache di ibernazione (primo livello o secondo livello). Ma questi non risolvono ancora il mio problema. La seconda volta richiede ancora meno tempo di quanto dovrebbe.

Qualche idea il motivo ha causato la seconda volta correre più veloce? è solo una semplice app per recuperare i dati dal DB

risposte:

5 per risposta № 1

La cache di primo livello di Hibernate non può essere disabilitato (vedere Come disabilitare la memorizzazione nella cache di ibernazione). Se vuoi, devi capire la cache della sessione di Hibernate vigore Hibernate query al database.

Lokesh Gupta ha un buon tutorial su http://howtodoinjava.com/2013/07/01/understanding-hibernate-first-level-cache-with-example/

  1. La cache di primo livello è associata all'oggetto "sessione" e altro gli oggetti di sessione nell'applicazione non possono vederlo.
  2. L'ambito degli oggetti cache è di sessione. Una volta che la sessione è chiusa, oggetti nascosti sono andati per sempre.
  3. La cache di primo livello è abilitata per impostazione predefinita e non puoi disabilitarlo.
  4. Quando interrogiamo un'entità per la prima volta, questa viene recuperata dal database e memorizzato nella cache di primo livello associata alla sessione di ibernazione.
  5. Se noi interrogare nuovamente lo stesso oggetto con lo stesso oggetto di sessione, sarà caricato dalla cache e nessuna query sql verrà eseguita.
  6. L'entità caricata può essere rimossa dalla sessione utilizzando il metodo evict (). Il prossimo caricamento di questa entità farà nuovamente una chiamata al database se è stato rimosso usando il metodo evict ().
  7. L'intera cache della sessione può essere rimossa usando il metodo clear (). Lo farà rimuovere tutte le entità memorizzate nella cache.

Dovresti quindi usare entrambi evict() o clear() metodo per forzare una query al database.

Per verificare ciò, è possibile attivare l'output SQL utilizzando il hibernate.show_sql proprietà di configurazione (vedi https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch03.html#configuration-optional).


1 per risposta № 2

Hai provato a disabilitare la cache nel database stesso?

Credo che le cache di primo e secondo livello di Hibernate siano specifiche di Hibernate, ma il database sarà comunque nascosto nella cache.

MySQL: forza di non usare la cache per testare la velocità della query