Как насчет использования базы данных для хранения
временные данные между веб-приложением
переходы? Это нормальная практика?
База данных уже имеет кеш. Приложение для проектирования скважины должно попытаться использовать его для уменьшения дискового ввода-вывода .
Кэш базы данных работает на уровне данных. Вот почему другой механизм кэширования может быть использован для обращения к различным уровням. На уровне Java вы можете использовать кэш 2-го уровня hibernate, который может кэшировать сущности и запрашивать результат. Это может заметно уменьшить сетевой ввод-вывод между приложением. сервер и база данных.
Тогда вы можете обратиться к горизонтальная масштабируемость , то есть добавить серверы для управления нагрузкой. В этом случае кэш 2-го уровня должен быть распределен по узлам. Это существует (см. JBoss cache), но управлять им немного сложнее.
Распределенный кэш работает лучше, если у него более простая схема, основанная на ключ / значение . Вот что такое memcached
, но есть и другие подобные решения. Самая большая проблема с распределенными кешами - аннулирование устаревших записей - что само по себе может стать узким местом в производительности.
Не думайте, что вы можете использовать распределенный кеш как есть , чтобы проблемы с производительностью исчезли. Проектирование масштабируемой распределенной архитектуры требует опыта и всегда является компромиссом между тем, что оптимизировать, а что нет.
Возвращаясь к вашему вопросу: для обычного приложения ИМХО нет необходимости в распределенном кеше. Достойный дисковый ввод-вывод и сетевой ввод-вывод обычно приводят к достойной производительности.
EDIT
Для непостоянных объектов у вас есть несколько вариантов:
-
HttpSession
. Объекты необходимо реализовать Serializable
. Точный способ управления сеансом зависит от контейнера. В кластере сеанс обычно дублируется дважды, поэтому в случае сбоя одного узла у вас остается одна копия. Затем существует сходство сеанса для направления запроса на сервер, на котором сеанс находится в памяти.
- Распределенный кеш. Система, подобная
memcached
, действительно может иметь смысл, но я не знаю деталей.
- База данных. Конечно, вы можете сбросить любой объект
Serializable
в базе данных в BLOB
. Может быть вариантом, если веб-серверы не так надежны, как сервер базы данных.
Опять же, для обычного приложения , я бы попытался пройти как можно дальше с HttpSession
.