2011-01-26 11 views
5

Cuál es la mejor política de almacenamiento en caché en Hibernate \ Grails. Almacenar en caché todas las entidades y consultas o no y cómo encontrar la mejor solución?Grails Hibernate: ¿guardar en caché o no?

Aquí mi 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" 
/> 

Respuesta

11

La mejor política es el almacenamiento en caché: sin almacenamiento en caché. En serio, el almacenamiento en caché (y cualquier optimización) se debe hacer solo para resolver un problema existente. Si no tiene problemas de rendimiento, no use el almacenamiento en caché. Si tiene problemas de rendimiento, aplique este sencillo procedimiento de 5 pasos para resolver problemas de rendimiento:

  1. Medida.
  2. Medida.
  3. Optimizar (agregar almacenamiento en caché, por ejemplo)
  4. Medir.
  5. Medida.

Tenga en cuenta que si no entiende cómo funciona el almacenamiento en caché en Hibernate, puede terminar teniendo un bajo rendimiento, en lugar de mejorarlo. Además, incluso si comprende cómo funciona el almacenamiento en caché en Hibernate, puede haber otros efectos que influyan en el rendimiento, lo que hace que el viaje de ida y vuelta de la base de datos sea más rápido que buscar el caché. Es por eso que debes medir antes y después de hacer "mejoras".

+0

La mejor política de almacenamiento en caché es: ¡no hay almacenamiento en caché! ¿Dónde estás alto cuando escribiste esto? –

+0

¿Has leído lo que escribí? Si su primer instinto ante una lentitud es almacenar cosas en la memoria caché, entonces está mal. Si estás seguro de que el almacenamiento en caché va a ayudar, y lo has medido, entonces el almacenamiento en caché es una alternativa. Sin saber cómo funciona, cuándo funciona y por qué funciona, es mejor no caché en absoluto. – jpkrohling

+0

Leo lo que escribiste y acepto el procedimiento de 5 pasos. No estoy de acuerdo con el enfoque agresivo hacia el almacenamiento en caché en general y cómo se inicia su argumento. Hay muchas actividades dinámicas y miles de usuarios que visitan bases de datos u otros servicios en sitios web grandes. Decir que el mejor almacenamiento en caché es el no almacenamiento en caché es absurdo. ... a menos que estés hablando del blog de mi abuela –

Cuestiones relacionadas