Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> hibernate и кеш, проблема при параллельной работы 
:(
    Опции темы
Barvetal
Дата 2.11.2006, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 181
Регистрация: 31.10.2005

Репутация: 5
Всего: 5



Всем привет!

Пытался использовать ehCache и osCache в hibernate, но проблема одна и та же. При устаревании ячейки hibernate-кеша происходит много обращений к базе до тех пор, пока для первого потока запрос (CriteriaQuery) не выполнится и результат не будет положен в кеш. 


Хотелось бы, чтобы после устаревания ячейки кеша, пока первый пользователь выполняет запрос для этой ячейки, остальные пользователи ожидали момента обновления этой ячейки, или получали старое значение ячейки (а не выполняли точно такие же запросы). Тогда бы сайт не тормозил бы на несколько десятков секунд каждые 5 минут.

Можно ли так настроить кеш в hibernate?

Всем заранее спасибо!

P.S.: Пример.
Я использую хибернейт на сайте с большим количеством одновременных пользователей (несколько десятков) и тяжелыми запросами (до секунды). Expiration время кеша установлено на 5 минут. Поэтому раз в 5 минут кеш устаревает, а так как пользователи открывают страницы сайта одновременно, для каждого из них происходит пересчет страницы. И, соответственно, выполняются одни и те же запросы к базе до тех пор, пока для первого пользователя запрос не будет выполнен и не положен в кеш. Поэтому все пользователи очень долго ожидают загрузки страниц каждые пять минут. 

P.P.S.:
Что я делал в ehcache:
Пытался использовать BlockingCache и SelfPopulatingCache, но, судя по всему эти виды кешей можно использовать только для кеширования своих объектов, а в hibernate эти виды кешей не поддерживаются.

Что я делал в oscache:
В oscache.properties указывал cache.blocking=false и cache.blocking=true, но в обеих случаях паралелльные потоки выполняли запросы к базе параллельно.
PM MAIL   Вверх
w1nd
Дата 2.11.2006, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 7
Всего: 54



А что у вас в "cache@usage"?


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Barvetal
Дата 15.3.2007, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 181
Регистрация: 31.10.2005

Репутация: 5
Всего: 5



Цитата(w1nd @ 2.11.2006,  01:50)
А что у вас в "cache@usage"?

А какая разница?

Возможны ж следующие варианты:
usage="transactional|read-write|nonstrict-read-write|read-only"

Для каждого из них по истечению времени кеша ячейка становится невалидной, и для ее заполнения вполне могут стартовать много параллельных потоков...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0404 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.