Кеширование доменных объектов в Grails - PullRequest
15 голосов
/ 20 июня 2011

Я рассматривал возможность реализации EhCache в моих доменных объектах Grails, например:

static mapping = {
   cache true
}

Я не слишком хорошо знаю, как именно работает этот механизм кэширования, и мне было интересно, каково хорошее эмпирическое правило при определениикакие доменные объекты выиграют от кэширования.например, объекты, к которым обращаются редко .. часто ...?

Спасибо!

1 Ответ

29 голосов
/ 20 июня 2011

Кэширование работает только для вызовов get() по умолчанию, но запросы используют кэш запросов, если вы обновите их с помощью cache: true (критерии и HQL).

cache true создает кэш для чтения и записи, но вы можете настроить кэш только для чтения с помощью

static mapping = {
   cache usage:'read-only'
}

Кэш только для чтения подходит для поиска данных, которые никогда не меняются, например, состояния, страны, роли и т. Д.

Если у вас есть классы доменов, которые часто обновляют, создают или удаляют, кэширование запросов часто будет медленнее, чем не кэширование. Это происходит потому, что подобные изменения приводят к тому, что все кэшированные запросы очищаются, поэтому вы все равно часто обращаетесь непосредственно к базе данных. См. http://tech.puredanger.com/2009/07/10/hibernate-query-cache/ для более подробного описания этого. По этой причине я редко использую кеширование запросов и часто отключаю его полностью с помощью

hibernate {
    cache.use_second_level_cache=true
    cache.use_query_cache=false
    cache.provider_class='org.hibernate.cache.EhCacheProvider'
}

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

Hibernate имеет API для мониторинга использования кэша. Плагины http://grails.org/plugin/app-info и http://grails.org/plugin/hibernate-stats делают информацию доступной, и вы можете использовать подход в своем собственном коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...