Кэширование на стороне сервера для приложения Java / Java EE - PullRequest
3 голосов
/ 02 августа 2010

Вот моя ситуация: у меня есть одностраничное приложение Java EE.Все клиент-серверное взаимодействие осуществляется на основе AJAX, а JSON используется в качестве формата для обмена данными.Один мой запрос занимает около 1 минуты для расчета данных, требуемых клиентом.Также эти данные огромны (может быть> 20 МБ).Таким образом, невозможно передать все данные в javascript за один раз.По этой причине я передаю только несколько записей клиенту и использую сетку для отображения данных с опцией подкачки.

Теперь, когда пользователь нажимает кнопку следующей страницы, мне нужно получить больше данных.У меня вопрос, как мне кэшировать данные на стороне сервера?Мне нужны эти данные только для одного пользователя как раз.Вы бы рекомендовали кэшировать все данные одним первым запросом, используя идентификатор сессии в качестве ключа?

Есть еще предложения?

Ответы [ 2 ]

1 голос
/ 02 августа 2010

Я предполагаю, что вы используете для этого БД.Я бы использовал лимиты для возврата небольших порций данных, у большинства поставщиков БД есть решение для этого.Это ускорит ваши запросы, а также большинство JS fameworks с компонентами типа сетки будут поддерживать разбиение на страницы результатов (например, ExtJS).

Если вы выбираете данные от сторонних производителей и передаете их (с некоторыми изменениями)или нет) Я все еще придерживаюсь базы данных и использую такой рабочий процесс: пул данных от третьей стороны, сохранение в дБ, вызов из вашего виджета небольших кусков, требуемых клиентами.

Надеюсь, это поможет.

1 голос
/ 02 августа 2010

Самый дешевый (и не очень неэффективный способ кэширования данных) в веб-приложении Java EE - это использовать объект Session, как вы и собираетесь. Это неэффективно, так как требует, чтобы разработчик гарантировал, что кеш не пропускает память; поэтому разработчик должен аннулировать ссылку на объект, если объект больше не нужен.

Однако, даже если вы хотите реализовать кеш бедного человека, кэширование 20 МБ данных не рекомендуется, так как оно плохо масштабируется. Вопрос масштабируемости возникает, когда несколько пользователей используют одну и ту же функциональность приложения, и в этом случае объем данных составляет 20 МБ.

Вам лучше возвращать разбитые на страницы "наборы данных" в форме JSON на основе шаблона проектирования ValueList . Каждый запрос запроса данных приводит к частичному извлечению данных, которые затем отправляются клиенту по проводной связи. Таким образом, вам никогда не придется кэшировать полные результаты выполнения запроса, а также вы можете вернуть частичные наборы данных. Это зависит только от вас, хотите ли вы кешировать данные; обычно кэширование выполняется для больших наборов данных, которые используются снова и снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...