2014-02-04 1 views
2

Мы разрабатываем распределенное веб-приложение (3 кота с балансиром нагрузки).Кэш в распределенном веб-приложении - сложный запрос использует случай

В настоящее время мы ищем решение для кеша. Это решение должно быть безопасным для кластеров. Мы используем пружину, JPA (MySQL)

Мы думали о следующем растворе:

Создать сервер кэша, который запускает простой кэш и все операции DB от каждого кота будет делегировано ему. (dao-слой в веб-приложении будет связываться с этим сервером вместо доступа к самому БД). Это привлекательно, так как кеш в конфигурации сервера кэшей может быть минимальным.

Что нам интересно о прямо сейчас:

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

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

Бест,

ответ

1

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

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

Другой вариант - реализовать кэш с несколькими уровнями: кеш второго уровня и кеш запросов, используя ehcache и большую память. Вы можете найти это полезным: http://ehcache.org/documentation/integrations/hibernate

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