Hibernate: различия между версиями
FireWolf (обсуждение | вклад) |
FireWolf (обсуждение | вклад) |
||
Строка 6: | Строка 6: | ||
= Выбор стратегии параллелизма кэша (SELECTING A CACHE CONCURRENCY STRATEGY) = | = Выбор стратегии параллелизма кэша (SELECTING A CACHE CONCURRENCY STRATEGY) = | ||
Java Persistence with Hibernate, 2nd p.548 (pdf | Java Persistence with Hibernate, 2nd p. 548 (p. 577 in pdf) | ||
== Транзакционная TRANSACTIONAL == | == Транзакционная TRANSACTIONAL == | ||
Доступна только в управляемой среде. Она гарантирует полную изоляцию транзакций до повторяемого чтения, если это требуется. Используйте эту стратегию для данных которых в большинстве считываются, в которых очень важно предотвратить появление устаревших данных в параллельных транзакциях, в редких случаях обновления. | Доступна только в управляемой среде. Она гарантирует полную изоляцию транзакций до повторяемого чтения, если это требуется. Используйте эту стратегию для данных которых в большинстве считываются, в которых очень важно предотвратить появление устаревших данных в параллельных транзакциях, в редких случаях обновления. |
Версия 03:42, 31 октября 2017
Java Persistence with Hibernate, 2nd
- Примеры Query и их отображений в Criteria API: p. 370 CHAPTER 15 (p. 399 in PDF)
String Repository (JpaRepository)
Выбор стратегии параллелизма кэша (SELECTING A CACHE CONCURRENCY STRATEGY)
Java Persistence with Hibernate, 2nd p. 548 (p. 577 in pdf)
Транзакционная TRANSACTIONAL
Доступна только в управляемой среде. Она гарантирует полную изоляцию транзакций до повторяемого чтения, если это требуется. Используйте эту стратегию для данных которых в большинстве считываются, в которых очень важно предотвратить появление устаревших данных в параллельных транзакциях, в редких случаях обновления.
Чтение-запись READ_WRITE
Поддерживает изоляцию чтения подтвержденного, используя механизм временных меток. Она доступна только в некластерных средах. Опять же, использовать эту стратегию нужно для чтения данных, в которых очень важно предотвратить появление устаревших данных в параллельных транзакциях, в том редком случае обновления.
Нестрогое-чтение-запись NONSTRICT_READ_WRITE
Не дает никакой гарантии согласованности между КЭШем и БД. Если есть возможность одновременного доступа к одной сущности, то вам необходимо настроить достаточно короткий срок истечения тайм-аута. В противном случае, вы можете прочитать устаревшие данные в КЭШе. Используйте эту стратегию, если данные редко меняются (несколько часов, дней или даже недель), и небольшая вероятность появления устаревших данных не является критической проблемой. Hibernate считает недействительным кэшируемый элемент, если модифицируемый объект очищается(flush), но это асинхронные операции, без какой-либо блокировки КЭШа или гарантии, что полученные данные являются последней версией.
Только-для-чтения READ_ONLY
Данная стратегия подходит для данных, которые никогда не меняются. Используйте её только для справочных данных.
Оценка
Обратите внимание, что с уменьшением строгости приходит увеличение производительности. Вы должны тщательно оценивать эффективность кластерного КЭШа с полной изоляцией транзакций, перед тем как использовать его в реальных условиях. Во многих случаях, вам было бы лучше, отключить кэш второго уровня для конкретного класса, если устаревшие данные не приемлемы. В начале, протестируйте ваше приложение с отключенным КЭШем второго уровня. Тогда включайте его только для хороших классов-кандидатов, по одному, постоянно тестируя производительность вашей системы и оценивая стратегию параллелизма.