Я хочу знать, могу ли я использовать Infinispan для синхронизации кэшированных данных с базой данных Oracle. Это мой сценарий. У меня есть два основных приложения. Одно приложение с высокой степенью одновременного использования, а второе используется в качестве административного модуля. Поскольку он очень параллелен, я хочу уменьшить количество подключений к базе данных (загрузить объекты в кеш (разрешить чтение и запись) и использовать его из этого места без вызова базы данных). Но тем временем я хочу обновить базу данных в соответствии с изменениями кеша, потому что модуль администратора использует базу данных напрямую. Может ли этот процесс обновления (кэшировать в базу данных) обрабатываться на уровне объекта без участия приложения? Пожалуйста, дайте мне знать, поддерживает ли Infinispan этот сценарий или нет. Если поддерживает, поделитесь идеями.
Синхронизируйте записи кэша Infinispan с базой данных
Ответы (2)
Да, это возможно. Infinispan поддерживает этот вариант использования.
Это должна быть только "проблема" простой конфигурации. Все, что вам нужно использовать, это правильно настроить CacheStore с passivation disabled
. Он будет синхронизировать ваш кеш (используемый высококонкурентным приложением) с базой данных.
Что именно вызывает?
Когда пассивация отключена, всякий раз, когда элемент изменяется, добавляется или удаляется, эта модификация сохраняется во внутреннем хранилище через загрузчик кеша. Прямой связи между вытеснением и загрузкой кеша нет. Если вы не используете вытеснение, то, что находится в постоянном хранилище, в основном является копией того, что находится в памяти.
Под памятью здесь подразумевается кеш. Если вы хотите узнать еще больше об этом и о других интересных вариантах, см.: https://docs.jboss.org/author/display/ISPN/Cache+Loaders+and+Stores#CacheLoadersandStores-cachepassivation
Возможно, стоит подумать о вышеупомянутом выселении. Отключить или включить его. Это зависит в основном от нагрузки, создаваемой вашим высокопараллельным приложением.
На самом деле это работает только тогда, когда вы используете Infinispan в том же кластере для административного модуля. Если вы загрузите A в память с помощью Infinispan, измените A на что-то другое в базе данных непосредственно с помощью административного модуля, тогда Infinispan не будет знать, что A был обновлен.