|
|
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Собственно сабж я так понимаю хранит кэш с ключом "текст запроса". Соответственно при новом запросе, даже если мы получаем "те же" объекты из бд, мы их так же храним - дублируем. автор query.setHint("org.hibernate.cacheable", true); - об этом окаянном говорю. Соответственно, с каждым новым запросом мы приближаем оутофмемори как можем. Варианты: -не запрашивать кучу данных(я честно, не знаю для чего.но запрашиваю.новый для меня проект) -не кэшировать(нормальный вариант) -кэшировать, но грамотно?(читал про naturalid optimized query cache, еще варианты?) -evic() и прочую ересь для очищения кэша использовать? п.с. хибернейт не знать, вопрос задавать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2012, 16:45:06 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Все неверно. 1. Query cache может быть только в кеше второго уровня, в специально отведенной для этого области. 2. Query cache хранит сопоставление [заропс] - [вытащенные айдишники], а не сами объекты. 3. При включенном кеше второго уровня и кеше запросов, повторный запрос не вызовет запроса к БД. Если же запрос все таки будет (например, вы принудительно его заставили это сделать), то существующие в кеше объекты будут перезаписаны (или не будут в зависимости от настроек), но никогда не будет ситуации, что в кеше есть больше одного объекта данного типа с одинаковым идентификатором. 4. С кешем первого уровня все точно так же: если вы 50 раз сделали селект записи по 5 одним и тем же сотрудникам, то на выходе у вас будет не 50*5 = 250 объектов в кеше, а 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2012, 16:49:20 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Озвериноб этом окаянном говорю. Соответственно, с каждым новым запросом мы приближаем оутофмемори как можем. Кеши используются Memory Sensitive и с возможностью хранения данных в файловой системе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2012, 16:50:15 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
ОзверинСоответственно, с каждым новым запросом мы приближаем оутофмемори как можем. аксиома? Или предположение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2012, 16:50:49 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Petro123ОзверинСоответственно, с каждым новым запросом мы приближаем оутофмемори как можем. аксиома? Или предположение? я с хибером на вы ;) предположения. читал, что в старых версиях, независимо от того, что сказал swenom - хранились не айдишники а объекты.. http://darren.oldag.net/2008/11/hibernate-query-cache-dirty-little_04.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2012, 17:05:15 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Озвериня с хибером на вы ;) предположения. ну, с ходу можно привести пример корзины в винде. Заполнит весь диск? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2012, 17:08:17 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Озвериня с хибером на вы ;) предположения. читал, что в старых версиях, независимо от того, что сказал swenom - хранились не айдишники а объекты.. http://darren.oldag.net/2008/11/hibernate-query-cache-dirty-little_04.html Пожалуйста, цитата из официальной доки, глава 19.4 - http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.htm : докаNote that the query cache does not cache the state of the actual entities in the result set; it caches only identifier values and results of value type . The query cache should always be used in conjunction with the second-level cache. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2012, 17:12:40 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Вот еще хорошая статейка - http://www.javalobby.org/java/forums/t48846.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2012, 17:14:46 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
svenomОзвериня с хибером на вы ;) предположения. читал, что в старых версиях, независимо от того, что сказал swenom - хранились не айдишники а объекты.. http://darren.oldag.net/2008/11/hibernate-query-cache-dirty-little_04.html Пожалуйста, цитата из официальной доки, глава 19.4 - http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.htm : докаNote that the query cache does not cache the state of the actual entities in the result set; it caches only identifier values and results of value type . The query cache should always be used in conjunction with the second-level cache. Я читал офф доку. https://hibernate.onjira.com/browse/HHH-3383 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2012, 17:16:34 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Да не нужен никакой кэш за пределами базы. Не мучайте себя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2012, 17:57:56 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
ОзверинЯ читал офф доку. https://hibernate.onjira.com/browse/HHH-3383 Ну только это не дока, а баг-трекер, в котором четко написано, что это баг, который уже пытались несколько раз исправить, но не добили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2012, 18:03:44 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪДа не нужен никакой кэш за пределами базы. Не мучайте себя.Ну вам не нужен, а людям, которые хоть что-то понимают в узких местах при работе с БД - еще как нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2012, 18:04:10 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪДа не нужен никакой кэш за пределами базы. Не мучайте себя. О! Давайте ещё одну тему засрем флеймом про 2-tier. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2012, 18:11:19 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
svenomОзверинЯ читал офф доку. https://hibernate.onjira.com/browse/HHH-3383 Ну только это не дока, а баг-трекер, в котором четко написано, что это баг, который уже пытались несколько раз исправить, но не добили. да, кэп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2012, 09:28:51 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Ну вам не нужен, а людям, которые хоть что-то понимают в узких местах при работе с БД - еще как нужен. У людей, которые хоть что-то понимают в узких местах при работе с БД, все эти гибернейтовские кэши вызывают смех. Вот, например, документация по самому популярному гибернейтовскому кэшу: http://ehcache.org/documentation/get-started/consistency-options We will walk through how a write is done and show that it is strongly consistent. A thread in Ehcache A performs a write. Before the write is done, a write lock is obtained from the Terracotta Server (storage system). The write lock is granted only after all read locks have been surrendered. Один общий лок на весь кластер с кэшем. Точно такой же подход, как в 1С 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2012, 19:59:16 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪНу вам не нужен, а людям, которые хоть что-то понимают в узких местах при работе с БД - еще как нужен. У людей, которые хоть что-то понимают в узких местах при работе с БД, все эти гибернейтовские кэши вызывают смех. Вот, например, документация по самому популярному гибернейтовскому кэшу: http://ehcache.org/documentation/get-started/consistency-options We will walk through how a write is done and show that it is strongly consistent. A thread in Ehcache A performs a write. Before the write is done, a write lock is obtained from the Terracotta Server (storage system). The write lock is granted only after all read locks have been surrendered. Один общий лок на весь кластер с кэшем. Точно такой же подход, как в 1С 7.Что плохого вы увидели в данном подходе? Как, на ваш взгляд, это можно исправить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2012, 20:10:43 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Кстати, как оказалось, я был не прав - ehcache использует блокировки на уровне отдельного ключа, так что не все так ужасно. В JBoss Cache писатели не блокируют читателей, так что масштабируемость там точно такая же, как в Oracle. Но все равно, получить несколько объектов такими, как они были на некоторый момент времени(read consistency), ни в одном из этих кэшей невозможно. Хотя в СУБД это есть с середины 80-х. С другой стороны, Hibernate все равно не поддерживает read consistency (так как он примешивает в результаты запросов объекты из сессии). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2012, 14:31:40 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪКстати, как оказалось, я был не прав - ehcache использует блокировки на уровне отдельного ключа, так что не все так ужасно. В JBoss Cache писатели не блокируют читателей, так что масштабируемость там точно такая же, как в Oracle. Но все равно, получить несколько объектов такими, как они были на некоторый момент времени(read consistency), ни в одном из этих кэшей невозможно. Хотя в СУБД это есть с середины 80-х. С другой стороны, Hibernate все равно не поддерживает read consistency (так как он примешивает в результаты запросов объекты из сессии). Эта "фича" только у оракл есть, но ораклом базы не ограничены (хотя сама корпорация оракл так не считает, но это их проблемы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2012, 17:07:46 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
schwaЭта "фича" только у оракл есть, но ораклом базы не ограничены (хотя сама корпорация оракл так не считает, но это их проблемы).Более любопытно другое - Йуный джавистЪ почему-то противопоставляет кэш второго уровня хибера СУБД. Йуный джавистЪНо все равно, получить несколько объектов такими, как они были на некоторый момент времени(read consistency), ни в одном из этих кэшей невозможно. Хотя в СУБД это есть с середины 80-х.Это как если бы я противопоставлял лопату тарелке каши ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2012, 17:14:46 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Эта "фича" только у оракл есть, но ораклом базы не ограничены (хотя сама корпорация оракл так не считает, но это их проблемы). Сейчас такая фича есть даже у бесплатных MySQL и PostgreSQL. Я даже не могу назвать сервер, в котором бы ее не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2012, 17:38:40 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪСейчас такая фича есть даже у бесплатных MySQL и PostgreSQL. Я даже не могу назвать сервер, в котором бы ее не было.Остается понять какое отношение эта фича имеет к понятию "кеш". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2012, 17:47:25 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Более любопытно другое - Йуный джавистЪ почему-то противопоставляет кэш второго уровня хибера СУБД. Не противопоставляю, а сравниваю. Кэш и СУБД одинаково являются транзакционными хранилищами данных. В них используюся одинаковые механизмы (локи, MVCC). Не вижу, почему их нельзя сравнивать. Если мы используем кэш поверх СУБД, то транзакции у нас будут только такие, какие поддерживает кэш. Если СУБД поддерживает read consistency, а кэш нет, то связка СУБД и кэша не поддерживает read consistency. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2012, 17:52:25 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Остается понять какое отношение эта фича имеет к понятию "кеш". Ответил постом выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2012, 17:53:15 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪБолее любопытно другое - Йуный джавистЪ почему-то противопоставляет кэш второго уровня хибера СУБД. Не противопоставляю, а сравниваю. Кэш и СУБД одинаково являются транзакционными хранилищами данных. В них используюся одинаковые механизмы (локи, MVCC). Не вижу, почему их нельзя сравнивать. Если мы используем кэш поверх СУБД, то транзакции у нас будут только такие, какие поддерживает кэш. Если СУБД поддерживает read consistency, а кэш нет, то связка СУБД и кэша не поддерживает read consistency.Ой ой ой, как же все неверно. Буквально наизнанку вывернуто. Кеш не является транзакционным хранилищем данных. Кеш это просто временное хранилище данных, точка. Не надо ему приписывать то, для чего он не предназначен. Цель кеша - снизить количество обращений к некоему стороннему "дорогому" ресурсу. В случае Хибера - к СУБД, так как сериализация и передача по TCP это дорогая операция по сравнению с получению ранее вытащенного обекта их памяти JVM. Но, разумеется, как и всегда, кеш не является универсальным решением, ему присущи проблемы. Какие именно? Первая - повышенные требования к памяти, т.е. экономим на дорогом обращении к СУБД, но теряем в памяти. Вторая - кеш склонен протухать. Любой кеш любой технологии имеет это свойство. Поэтому, работая с кешем, мы за ускорение работы платим риском того, что в какой-то момент данные, с которыми мы работаем окажутся в неактуальном состоянии. Это абслоютно нормально, это ожидаемое поведение кеша. Ну а транзакции - где вы в кеше транзакционность нашли? Кеш второго уровня как раз и предназначен для того, что бы быть вне транзакций ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2012, 18:09:46 |
|
||
|
Hibernate + query cache.
|
|||
|---|---|---|---|
|
#18+
svenomКеш не является транзакционным хранилищем данных. Кеш это просто временное хранилище данных, точка. Не надо ему приписывать то, для чего он не предназначен. Цель кеша - снизить количество обращений к некоему стороннему "дорогому" ресурсу. В случае Хибера - к СУБД, так как сериализация и передача по TCP это дорогая операция по сравнению с получению ранее вытащенного обекта их памяти JVM. Но, разумеется, как и всегда, кеш не является универсальным решением, ему присущи проблемы. Какие именно? Первая - повышенные требования к памяти, т.е. экономим на дорогом обращении к СУБД, но теряем в памяти. Вторая - кеш склонен протухать. Любой кеш любой технологии имеет это свойство. Поэтому, работая с кешем, мы за ускорение работы платим риском того, что в какой-то момент данные, с которыми мы работаем окажутся в неактуальном состоянии. Это абслоютно нормально, это ожидаемое поведение кеша. Ну а транзакции - где вы в кеше транзакционность нашли? Кеш второго уровня как раз и предназначен для того, что бы быть вне транзакций Вообще бывают и транзакционные кэши. Только нужно понимать, что "транзакционность" это огромная нагрузка на взаимодействие между нодами. И далеко не всегда она нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2012, 18:59:09 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37633457&tid=2132439]: |
0ms |
get settings: |
17ms |
get forum list: |
16ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
43ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
87ms |
get tp. blocked users: |
3ms |
| others: | 373ms |
| total: | 568ms |

| 0 / 0 |
