Grails \ Hibernate: кэшировать или не кэшировать? - PullRequest
5 голосов
/ 26 января 2011

Какова лучшая политика кэширования в Hibernate \ Grails. Кэшировать все сущности и запросы или нет и как найти лучшее решение?

Вот мой Спящий режим Конфиг.

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"
/>

1 Ответ

12 голосов
/ 26 января 2011

Лучшая политика кэширования: нет кэширования.Серьезно, кэширование (и любая оптимизация) должны выполняться только для решения существующей проблемы.Если у вас нет проблем с производительностью, не используйте кеширование.Если у вас есть проблемы с производительностью, примените эту простую 5-шаговую процедуру для решения проблем с производительностью:

  1. Measure.
  2. Measure.
  3. Оптимизация (добавьте кеширование,например)
  4. Измерить.
  5. Измерить.

Обратите внимание, что если вы не понимаете, как работает кэширование в Hibernate, у вас может получиться низкая производительностьвместо того, чтобы улучшать это.Кроме того, даже если вы понимаете, как работает кеширование в Hibernate, могут быть другие эффекты, влияющие на производительность, которые приводят к тому, что обратное обращение к базе данных выполняется быстрее, чем поиск в кеше.Вот почему вы должны измерять до и после выполнения «улучшений».

...