Обзор
Hibernate предлагает четыре основные стратегии кеширования, которые оптимизируют производительность в зависимости от требований приложения и потребностей параллелизма.
Стратегия Read-Only
Стратегия Read-Only идеальна, когда приложению нужен кеш только для операций чтения. Этот подход:
- Даёт отличный прирост производительности
- Прост в реализации
- Безопасен в кластерных окружениях
- Подходит для статических или справочных данных, которые редко меняются
Стратегия Read/Write
Стратегия Read/Write поддерживает как операции чтения, так и записи. Ключевые моменты:
- Не рекомендуется для приложений, требующих уровня изоляции транзакций
serializable
- Требует явных механизмов блокировки при развёртывании в кластерных окружениях
- Сложнее, чем Read-Only, но обеспечивает большую гибкость
Стратегия Nonstrict Read/Write
Стратегия Nonstrict Read/Write предназначена для приложений с редкими обновлениями данных. Важные ограничения:
- Нельзя использовать с требованиями уровня изоляции транзакций
serializable
- Обеспечивает ослабленные гарантии консистентности
- Работает лучше, чем Read/Write, для редко изменяемых данных
Стратегия Transactional
Стратегия Transactional обеспечивает наивысший уровень консистентности кеша:
- Поддерживает полнофункциональные транзакционные провайдеры кеша (например, JBoss TreeCache)
- Гарантирует ACID-совместимость для кешированных данных
- Лучший выбор для критически важных приложений, требующих строгих гарантий консистентности
Рекомендации по выбору
Выбирай стратегию кеширования исходя из:
- Частоты записи: Read-only для статических данных; Read/Write или Nonstrict Read/Write для изменяемых данных
- Требований к изоляции: избегай Read/Write и Nonstrict Read/Write при изоляции
serializable
- Окружения: учитывай потребности кластеризации и накладные расходы на блокировку
- Требований к консистентности: используй Transactional для критических данных, которым нужны полные ACID-гарантии