Когда перейти на кеширование / кэш второго уровня?Любой практический сценарий со спецификой? - PullRequest
2 голосов
/ 05 сентября 2010

Я работаю над веб-приложением, принадлежащим производителю автомобилей, разработанным в Spring-Hibernate с базой данных MS SQL Server 2005.

Через это приложение конечные пользователи могут запросить создание автомобиля, автобуса, грузовика и т. Д. Через веб-интерфейсы. Когда пользователь входит в систему, отображается форма HTML для захвата технической спецификации автомобиля, например, если кто-то хотел запросить автомобиль, он может указать данные о модели / модели двигателя, шинах, шасси и т. Д. Всего существует 100 элементов формы. на экране «Создать запрос транспортного средства», из которых 30% представляют собой раскрывающиеся списки (поля «ВЫБОР») для отображения параметров (т. е. пользователи могут выбирать один из них). Эти поля SELECT заполняются из значений, хранящихся в базе данных (основные данные). Эти основные данные меняются не реже одного раза в неделю, запуская хранимую процедуру в серверной части.

В мире существует около 10 000 пользователей этого приложения, и самое большее мы ожидаем 5000 обращений в день для запроса нового транспортного средства, т.е. 5000 раз будет отображаться форма создания автомобиля.

У меня вопрос: нужно ли мне использовать Кэш второго уровня для хранения значений поля формы, отображаемых из основных данных?

Поскольку эти значения отображаются из набора мастер-таблиц, которые будут меняться только раз в неделю, я думаю, что кэширование основных данных поможет повысить производительность, но я не слишком уверен, поскольку мне еще предстоит двигаться мое приложение для производства, чтобы увидеть реальную производительность и посмотреть, действительно ли мне нужно кэширование.

Если я займусь кешированием, мне может понадобиться неделю или две, чтобы понять, как это настроить, и я не хотел бы провести неделю или две, не видя никакой реальной выгоды?

Нужна помощь экспертов по этому вопросу. Также, если кто-то может поделиться практическими сценариями, где кэширование действительно необходимо, было бы очень полезно.

Ответы [ 2 ]

3 голосов
/ 06 сентября 2010

Мой вопрос: нужно ли мне использовать опцию кэша второго уровня для хранения значений поля формы, отображаемых из основных данных?

Вам не нужно , но вы можете.И данные только для чтения (или в основном считываемые), такие как неизменяемые справочные данные (страны, штаты, налоговые коды или, в вашем случае, 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).Это потребует несколько строк кода.Если это возможно, перезапуск вашего приложения будет другим вариантом.

2 голосов
/ 05 сентября 2010

5000 обращений в день звучит как трафик, но имейте в виду, что это только 3 с половиной попадания в минуту.Предполагая, что ваша база данных может выполнить все запросы, необходимые для отображения страницы менее чем за пару сотен миллисекунд, вы, вероятно, в порядке.

Тем не менее, кэширование - это хороший следующий шаг.Похоже, что кеширование запросов может быть полезно для вас, поскольку ваши данные изменяются очень редко.

...