2011-01-26 12 views
5

Qual è la migliore politica di memorizzazione nella cache in Hibernate \ Grails. Memorizza nella cache tutte le entità e le query e no e come trovare la soluzione migliore?Grails Hibernate: per memorizzare o non memorizzare nella cache?

Qui il mio hibernate config.

hibernate { 
    cache.use_second_level_cache = true 
    cache.use_query_cache = true 
    cache.provider_class = 'org.hibernate.cache.EhCacheProvider' 
    connection.useUnicode = true 
    connection.characterEncoding = 'UTF-8' 
    connection.provider_class = 'org.hibernate.connection.C3P0ConnectionProvider' 
    dialect = 'org.hibernate.dialect.MySQL5InnoDBDialect' 
    order_updates = true 
    c3p0.min_size = 5 
    c3p0.max_size = 20 
    c3p0.max_statements = 20 * 10 
    c3p0.idle_test_period = 15 * 60 
} 

EHCache config

<defaultCache 
     maxElementsInMemory="10000" 
     eternal="false" 
     timeToIdleSeconds="120" 
     timeToLiveSeconds="120" 
     overflowToDisk="true" 
     maxElementsOnDisk="10000000" 
     diskPersistent="false" 
     diskExpiryThreadIntervalSeconds="120" 
     diskSpoolBufferSizeMB="100" 
     memoryStoreEvictionPolicy="LRU" 
/> 

<cache 
      name="org.hibernate.cache.StandardQueryCache" 
      maxElementsInMemory="50" 
      eternal="false" 
      timeToLiveSeconds="120" 
      overflowToDisk="true" 
/> 

risposta

11

La migliore politica di caching è: no cache. Seriamente, il caching (e qualsiasi ottimizzazione) dovrebbe essere fatto solo per risolvere un problema esistente. Se non si verificano problemi di prestazioni, non utilizzare la memorizzazione nella cache. Se riscontri problemi di prestazioni, applica questa semplice procedura in 5 passaggi per risolvere i problemi di prestazioni:

  1. Misura.
  2. Misura.
  3. Ottimizza (aggiungi la cache, ad esempio)
  4. Misura.
  5. Misura.

Si noti che se non si capisce come funziona la cache in Hibernate, si può finire per avere scarse prestazioni, invece di migliorarlo. Inoltre, anche se capisci come funziona la cache in Hibernate, potrebbero esserci altri effetti che influenzano le prestazioni, causando un roundtrip del database più veloce rispetto alla ricerca della cache. Ecco perché dovresti misurare prima e dopo aver fatto "miglioramenti".

+0

La politica di caching migliore è: nessun caching! ?? Dove sei in alto quando hai scritto questo? –

+0

Hai letto quello che ho scritto? Se il tuo primo istinto di fronte a una lentezza è di mettere in cache le cose, allora è sbagliato. Se sei sicuro che il caching ti aiuterà, e lo hai misurato, il caching è un'alternativa. Senza sapere come funziona, quando funziona e perché funziona, è meglio non memorizzare nella cache. – jpkrohling

+0

Ho letto quello che hai scritto e sono d'accordo con la procedura in 5 passaggi. Non sono d'accordo con l'approccio aggressivo al caching in generale e su come si avvia la discussione. Esistono molte attività dinamiche e migliaia di utenti che utilizzano database o altri servizi in siti Web di grandi dimensioni. Dire che il caching migliore non è il caching è assurdo! ... a meno che tu non parli del blog di mia nonna –

Problemi correlati