2012-03-12 5 views
0

К тому же к кешу запроса применяются также стратегии параллелизма кэша Hibernate (например, кэш-запрос получает некоторые скалярные данные, а затем два запроса одновременно изменяют скалярные данные)? Если нет, что происходит с параллельными обновлениями (или чтениями/обновлениями) для запросов? Если да, как указать их для кеша запросов?Стратегия параллельного кэширования кэша Hibernate

+0

хорошая статья в этом контексте: http://tech.puredanger.com/2009/07/10/hibernate-query-cache/ – shrini1000

ответ

1

Стратегия следующая.

Кэш временной метки отслеживает последнюю временную метку обновления для каждой таблицы.

Каждый раз, когда выполняется запрос cachable и что результаты находятся в кеше запросов, Hibernate проверяет, что временная метка результатов запроса больше (более поздняя), чем временная метка времени для каждой таблицы, связанной с запросом. Если размер больше, то результаты не являются устаревшими, и результаты кэширования возвращаются. Если ниже, то кешированные результаты потенциально устаревают, и запрос выполняется в базе данных.

+0

О, хорошо! Спасибо за ответ. Означает ли это, что сам кеш запросов никогда не обновляется, а только недействителен, что позволяет избежать проблем с одновременным обновлением? – shrini1000

+0

Я не знаю точно, как кэш взаимодействует с параллельными обновлениями в кеше. Но это кеш, доступный из нескольких потоков. Я предполагаю, что используются синхронизация и параллельные коллекции. Тебе действительно не нужно заботиться. –

+0

Ну, для кэша второго уровня такие стратегии, как нестрочная запись-чтение и чтение-запись, ведут себя по-разному и влияют на производительность. Поэтому я хочу знать, относятся ли подобные вещи к кешу запросов, влияя на его производительность. Отсюда этот вопрос. – shrini1000

Смежные вопросы