Сетка данных jboss для кластерного корпоративного приложения — как эффективнее

у нас есть кластерное корпоративное приложение, использующее транзакцию JTA и режим гибернации для операций базы данных, развернутых на JBoss EAP.

Для повышения производительности системы мы планируем использовать сетку данных Jboss. Вот как я планирую использовать сетку данных jboss:

  • Я добавляю/заменяю объект в кеше всякий раз, когда он вставляется/обновляется в базу данных с использованием cache.put
  • когда объект удаляется из базы данных, он удаляется из кеша с помощью cache.remove
  • при извлечении сначала попробуйте получить данные из кеша с помощью ключа или запроса. Если данных нет, загрузите данные из базы данных.

Однако у меня есть вопросы по сетке данных:

  • Для запроса объектов мы используем критерии гибернации, однако сетка данных использует собственный построитель запросов. Можем ли мы избежать написания отдельного запроса для гибернации и сетки данных?
  • Я хочу, чтобы список объектов возвращался в соответствии с критериями. Если один из объектов, соответствующих критериям, удаляется из кеша, автоматически ли он перезагружается из базы данных?
  • Если транзакции откатываются, они также откатываются из кеша сетки данных
  • Есть ли примеры, на которые я могу сослаться для моей реализации сетки данных?
  • что лучше выбрать для моего требования infinispan в качестве кеша 2-го уровня или сетки данных в библиотеке или удаленном режиме?

person priyam    schedule 19.06.2018    source источник
comment
JBoss EAP уже поставляется с поставщиком кэша второго уровня Infinispan, который делает большую часть того, что вам нужно выше. Вам просто нужно включить его, см. пример здесь .   -  person Galder Zamarreño    schedule 19.06.2018


Ответы (1)


Комментарий Гальдера верен, лучше всего использовать Infinispan в качестве поставщика кеша второго уровня. Попытка реализовать это самостоятельно очень подвержена проблемам со временем (у вас будут устаревшие/необновленные записи в кеше).

Что касается запросов: при кэшировании запросов 2LC в кеше сохраняется карта «sql-запрос» -> «список результатов». Однако после обновления любого типа, используемого в запросе, все такие запросы становятся недействительными (например, если в запросе перечислены люди старше 60 лет, обновление новорожденного по-прежнему делает этот запрос недействительным). Поэтому это должно быть включено только тогда, когда запросы преобладают над обновлениями.

Infinispan имеет собственную поддержку запросов, но она не отображается при использовании в качестве поставщика 2LC. Предполагается, что кеш будет содержать только (наиболее часто используемое) подмножество объектов в базе данных, и поэтому результаты таких запросов не будут правильными.

Если вы хотите перейти на Infinispan, но сохранить постоянство БД, можно использовать хранилище кеша JPA (и индексацию). Обратите внимание, что обновления БД, которые не проходят через Infinispan, не будут отражаться в кеше, а индексация может немного отставать (поскольку она асинхронная). Вы можете разделить свой набор данных и использовать JPA для одной части и кэш-хранилище Infinispan + JPA для другой.

Третий вариант — использование Hibernate Search, который хранит данные в базе данных, но индекс находится в Lucene (возможно, также хранится в кэшах Infinispan), и вы не используете Criteria API, а используете API поиска в спящем режиме.

person Radim Vansa    schedule 25.06.2018
comment
спасибо за подробный ответ. В моем приложении мы используем hql и запрос критериев для операций CRUD. Если я включу только кеширование сущностей и не кеширование запросов, получу ли я преимущество в производительности от использования 2LC, потому что я вижу, что БД получает удар при каждом выполнении запроса? Также можете ли вы сказать мне, как я могу получить статистику для полной транзакции. После включения статистики гибернации я получаю статистику для каждого попадания в БД, но мне нужно завершить транзакцию. - person priyam; 26.06.2018
comment
Я использую hibernate 4.2.5, в котором нет StatisticalLoggingSessionEventListener, и я хочу, чтобы 2LC попали и пропустили статистику. - person priyam; 26.06.2018