Java сервлеты для вычислений или просто контроль? - PullRequest
0 голосов
/ 23 ноября 2010

я делаю сайт.он в основном вычисляет кратчайшие пути на графе с динамически меняющимися весами.

Я планирую использовать jsp для разработки

Исходные веса хранятся в базе данных.Когда мой веб-сайт запущен и работает, люди могут войти в систему и выполнять задачи, которые могут привести к изменению веса ребер.Они могут запрашивать кратчайшие пути от любого узла к любому узлу.Мой вопрос:

  1. Каждый раз, когда я получаю запрос Кратчайшего пути, я должен

    a.прочитать базу данных, построить график, рассчитать кратчайший путь и вернуть результат?Или;
    б.Если график сохраняется в памяти до тех пор, пока сервер работает, график создается из базы данных только один раз, когда сайт работает.Всякий раз, когда встречается запрос updateWeight, веса обновляются как в памяти, так и в базе данных.

  2. Если b.тогда как мне сохранить этот динамический граф в памяти?Является ли сервлет подходящей технологией для этого?Я представляю себе сценарий, в котором мои jsp-страницы будут запрашивать сервлет для обоих типов запросов .... Когда сервлет запускается в первый раз, он читает базу данных и создает график, а затем всякий раз, когда jsp-страница запрашиваеткратчайший путь, он вычисляется напрямую, не обращаясь к базе данных.

Сервлет используется для управления «процессом» - так что я прочитал ... так что сервлет не подходитвещь для этого .. если нет, то что?бобы?

Ответы [ 2 ]

1 голос
/ 23 ноября 2010

Выбор за вами: если вы согласны с тем, что пользователь будет ждать результата в течение долгого времени, то вы можете просто запросить базу данных, рассчитать путь и затем вернуть результат. Но если вам повезло, и ваш сервлет работает на сервере с большим объемом памяти, вы, конечно, можете загрузить график в память и сохранить его там.

Технология сервлетов здесь в порядке. Только не пишите весь код вычисления внутри методов doGet () или doPost (). Сервлет должен действительно действовать как контроллер и просто получать результат от других классов. Переместите код в другой поток и выполните работу в классах калькуляторов.

0 голосов
/ 23 ноября 2010

а. прочитать базу данных, построить график, рассчитать кратчайший путь и вернуть результат? Или же; б. Если график сохраняется в памяти до тех пор, пока сервер работает, график создается из базы данных только один раз, когда сайт работает. Всякий раз, когда встречается запрос updateWeight, веса обновляются как в памяти, так и в базе данных.

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

Если б. тогда как мне сохранить этот динамический граф в памяти? Является ли сервлет подходящей технологией для этого? Я представляю себе сценарий, когда мои jsp-страницы будут запрашивать сервлет для обоих типов запросов .... Когда сервлет запускается в первый раз, он читает базу данных и создает график, а затем всякий раз, когда jsp-страница запрашивает кратчайший путь, он рассчитывается напрямую, не обращаясь к базе данных.

Вы можете сделать это, но в хорошо разработанном подходе MVC сервлет должен действовать только как контроллер запроса / ответа. Выполните бизнес / вычислительную работу в объектах домена / действия (сервлет должен просто делегировать работу им). Для выполнения инициализации всего приложения лучше всего реализовать ServletContextListener, который помещает данные в область приложения. Затем сервлет может просто получить его из области приложения, а JSP также может получить к нему доступ через EL. Однако вы должны тщательно учитывать синхронизацию / параллелизм изменений данных всего приложения. БД лучше подходит для этого.

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