2014-02-08 3 views
0

Я разрабатываю веб-приложение, которое в основном позволяет пользователю создать граф в своем браузере (на сервере граф в основном представляет собой список узлов, и каждый узел имеет список ребер). Каждый узел или ребро, которые пользователь создает или удаляет, передается на сервер через Ajax, поэтому сервер может построить равный граф, представленный объектами Java. Это приложение представляет собой веб-версию рабочего стола. Поэтому я хотел бы предложить пользователю возможность «сохранить» график. Моя первоначальная идея заключалась в сохранении объекта в базе данных, когда пользователь нажимает кнопку сохранения, но для этого мне нужно сохранить график в сеансе пользователя.Могу ли я хранить весь график в Java HttpSession?

Могу ли я хранить граф (который представляет собой набор узлов и ребер) внутри сеанса http или есть лучший способ достичь того, что я хочу?

Обс: Я думал о манипулировании графиком непосредственно в базе данных, т. Е. График всегда сохраняется, и если истекает срок действия пользовательского сеанса, я удаляю график базы данных, если он еще не сохранен.

+1

Сохранение диалогового состояния на сервере всегда отрицательно влияет на масштабируемость и потребует предоставления дополнительных ресурсов сервера. Я понимаю, что вы поддерживаете состояние полного графика в клиенте. Если вы уже достигли этого, я думаю, что вы не должны взаимодействовать с сервером, если пользователь не хочет сохранять график. – Ralf

+0

Вы верите, что я не считал эту возможность? Я не могу сделать это точно, но я могу сделать это почти. Благодарю. –

ответ

1

Ответ зависит от масштаба вашего приложения.

Если у вас есть только один сервер с достаточным объемом памяти для хранения сессий для всех одновременно работающих пользователей

Хранение информации в сессии проще всего сделать. Убедитесь, что ваш график является сериализуемым, а остальное - контейнером Servlet (или J2EE). Вы можете помочь с сохранением httpsession, если вы реализуете какой-то пользовательский алгоритм для своих данных.

Если вы выросли большой

То есть, если у вас есть более одного сервера с балансировки нагрузки перед или ваши графики не помещаются в памяти. Храните их в каком-то общем хранилище - либо в БД, либо в виде фильтра, а затем извлекайте их с помощью некоторого ключевого поиска. Рассмотрите возможность использования липкие сессии, чтобы свести к минимуму Lookups/файлов БД и кэширует последние графики в памяти

Fancy трюк

Если вы нашли способ сжать весь свой график в 1-2KB поместить его целиком в HTTP печенье, браузер отправит его обратно вам по каждому запросу, ваш сервер будет без гражданства, без БД, нет проблемы с доступом к сессии.

+0

Если мое приложение уже готово использовать базу данных, то, по вашему мнению, лучше всего сделать это сейчас? –

+1

Я бы не стал беспокоиться о БД, пока мне не пришлось развернуть более одного сервера –

+0

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

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