Мой вопрос: нужно ли мне использовать опцию кэша второго уровня для хранения значений поля формы, отображаемых из основных данных?
Вам не нужно , но вы можете.И данные только для чтения (или в основном считываемые), такие как неизменяемые справочные данные (страны, штаты, налоговые коды или, в вашем случае, Engine, Tire, Chassis и т. Д.), Являются идеальными кандидатами на кэширование второго уровня.(и кеширование запросов, если требуется).
Поскольку эти значения отображаются из набора главных таблиц, которые будут меняться только раз в неделю, я думаю, что кэширование основных данных поможет повысить производительность,
Ну, в зависимости от того, сколько оборудования, размер вашего кластера и т. Д., Ваше приложение может просто справиться с нагрузкой.Но, как я уже писал, очень часто кешируются данные только для чтения:
- нет никакого смысла в попадании в базу данных каждый раз, когда
- избегание этих попаданий не повредит, если включенов долгосрочной перспективе, даже если это не проблема сейчас
- они не часто меняются, кэширование их легко обрабатывать и работает очень хорошо
Простоимейте в виду, что кэширование вещей означает, что их представление объектов не будет собираться мусором, поэтому это может немного увеличить потребности в памяти.
, но я не слишком уверен, поскольку мне еще предстоит переместитьсямое приложение для производства, чтобы увидеть реальную производительность и посмотреть, действительно ли мне нужно кэширование.
Честно говоря, вам не следует ждать выпуска продукции, чтобы узнать, есть ли проблемы с производительностью.Прежде чем загружать или подвергать стресс-тестированию свое приложение в специализированной среде, необходимо настроить приложение, JVM, сервер приложений, базу данных и т. Д. И не забывайте: вы не можете улучшить то, что не можете измерить.
Если я займусь кешированием, мне может потребоваться потратить неделю или две, чтобы понять, как это настроить, и я не хочу тратить неделю или две, не видя реальноговыгода?
Это не так сложно.Вам необходимо активировать кэширование второго уровня и кэширование запросов в конфигурации Hibernate и выбрать поставщика кэширования.Я рекомендую использовать EhCache, и соответствующие свойства:
hibernate.cache.use_second_level_cache=true
hibernate.cache.use_query_cache=true
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
Затем пометьте соответствующие объекты как кешируемые (и кешируйте запросы, используемые для извлечения данных, если вы не загружаете их по id).
И если вы решите использовать кэш второго уровня, вам придется удалить кеш вручную, поскольку вы не обновляете данные через Hibernate API, а используете хранимую процедуру (с помощью методов evict
).на SessionFactory
).Это потребует несколько строк кода.Если это возможно, перезапуск вашего приложения будет другим вариантом.