2014-11-13 4 views
5

Мы используем Hibernate с JPA в проекте, который мы сейчас разрабатываем. В настоящее время на Wildfly и в будущем возможны коммерческие версии в зависимости от потребностей.Какое решение для кэша второго уровня Hibernate

Некоторые альтернативы для кеша второго уровня перечислены в Hibernate documentation here. Существуют также другие решения, такие как Hazelcast. Среди альтернатив, похоже, JBoss официально поддерживает Infinispan solution.

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

  • Не могли бы вы поделиться своим опытом в таком сценарии? Это хороший случай использования? Есть ли лучший способ сохранить такие данные? Как вы обрабатываете данные, которые редко или никогда не меняются?
  • Какой провайдер вы использовали в прошлом и/или используете в настоящее время как кэш второго уровня и почему? Каковы плюсы и минусы решения, которое вы выбрали?

ответ

2
  1. Второго уровень кэш-кэш-отношение данных и не полномасштабное решение кэширования объектов. Таким образом, это только основные свойства сущности и внешние ключи, которые сохраняются. Что касается ассоциаций сущностей, то * -To-One может быть сохранен в разных областях кеширования, тогда как отношения * -To-Many требуют включения кеша запросов.

    Я думаю, что кеш второго уровня намного полезнее, когда ваши сущности на самом деле изменяются время от времени. Запись в кэше второго уровня недействительна, когда объект определяется как грязный.

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

    Так что, если ваши рабочие процессы вращаются вокруг объектов с иерархией, то кэш объектов более подходит.

  3. Если ваше приложение фактически не работает с объектами, но с различными данными, соединяющими проекции, тогда вы должны добавить индексы DB и убедиться, что для сервера БД достаточно памяти для обслуживания данных из памяти, не ударяя диск.

Решение:

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

+0

Спасибо за ваш вклад. Можете ли вы рассказать о том, как я могу использовать полномасштабное решение для кэширования объектов, в отличие от второго уровня кэша Hibernate и как его интегрировать? Также, если у вас есть какие-либо рекомендации относительно конкретного решения в памяти для кеша второго уровня, я бы с удовольствием услышал его. – Dkyc

+0

Проверьте раздел решения моего обновленного ответа. –

1

Я использовал ehcache для хранения и кеширования географических данных. Это очень удобно использовать. Взгляните на их сайт http://ehcache.org/.

1

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

В качестве решения я порекомендую вам использовать TayzGrid в качестве спящего режима второго уровня, так как наряду с основными функциями кэширования и истечениями и т. Д. Он также обеспечивает зависимости базы данных, т.е. данные в кеше будут автоматически заблокированы кешем, если соответствующие записи в базе данных изменение. Вы можете найти дополнительную информацию: http://www.alachisoft.com/tayzgrid/hibernate-second-level-cache.html

Смежные вопросы