2013-03-19 3 views
1

Краткая версия: Нужна консультация (плюсы и минусы) при выборе инфраструктуры Java-инфраструктуры для клиент-серверного приложения с низким количеством пользователей/запросов и относительно большим количеством данных.советы по выбору сетевой среды для java

Возможные варианты:

  1. RMI
  2. реки Apache
  3. Нетти (это кажется более асинхронным ориентированным, может это сделать синхронные вызовы?)
  4. Некоторые другие рамки, которые сделают мою жизнь легче? :)

Длинная версия: Текущий проект я работаю на это настольное приложение, написанное на Java, что позволяет пользователю оптимизировать часть цепочки поставок. Обратите внимание, что приложение до сих пор было только настольным. У него была база данных, установленная на локальной машине, и все. Теперь у нас есть новые требования по изменению кода для поддержки общей/сетевой базы данных. Установка базы данных на сетевом сервере и запуск нескольких экземпляров приложения выявили (как и ожидалось) множество проблем. Самые большие проблемы связаны с тем, что взаимодействие с базами данных не было разработано с учетом параллелизма. У нас много ожиданий блокировки и несколько тупиков. Было принято решение о том, что уровень доступа к данным будет изменен для учета новых требований.

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

Типичный сценарий использования выглядит следующим образом:

  1. Запустите приложение
  2. Импорт данных из файла CSV (обычно между 600МБ-1GB) и сохраните его для дальнейшего использования
  3. Добавить конфигурации сценариев (очень маленький объем данных) и сохранить их
  4. Запустите оптимизацию (берет данные с шага 1, применяет конфигурацию, применяет некоторые оптимизации/ограничения)
  5. Показать opti mization.

Шаг 4 будет выполнен на сервере, шаги 1-3 и 5 будут выполнены на клиенте.

У вас есть предложения/советы? Спасибо.

+0

Я понимаю, что проблема в том, что у вас есть файл размером 600 МБ - 1 ГБ на локальной машине и его необходимо загрузить на сервер. Я прав? –

+0

@PiotrGwiazda Да, в основном вы правы. Файл импортируется на локальный компьютер, он преобразуется в формат данных, который используется приложением, и должен быть сохранен в базе данных для использования в ходе шага 4. Также на шаге 3 простая конфигурация изменяется (меняет значение двойное поле, добавьте некоторую сущность в список) также должны быть сохранены. –

ответ

0

Таким образом, реальный вопрос заключается в том, как загрузить большой объем данных. Для такого soluton я бы не пошел в RMI - он слишком ограничен. Apache River кажется своего рода изобретением. Netty - это сетевая инфраструктура низкого уровня. Вам придется писать собственный протокол.

Я бы просто использовал простой HTTP-сервер и загружал данные с HTTP POST-запросом. Вы можете работать с сжатием Gzip. HTTP довольно хорош с большими файлами.

На стороне сервера любой контейнер сервлетов, вероятно, будет работать (Tomcat, Jetty и т. Д.).

На стороне клиента Apache HTTP Components должно быть достаточно. Вы также можете попробовать Ning Async HTTP Client.

+0

Как насчет RMI «слишком ограничен»? Я знаю, что RMI не идеальна и зависит от вашего варианта использования, возможно, это не правильный инструмент для работы, но «слишком ограниченный»? –

+0

Кроме того, следует отметить, что если вы используете HTTP, вам придется выполнять какую-то обработку сеанса, поскольку это протокол без состояния. –

+0

Говоря, что RMI слишком ограничен, я имел в виду, что вводит очень плотную связь между модулями. Для того, чтобы все работы API, DTO и исключения для сериализации Java выполнялись, вам нужно иметь одни и те же классы Java в одних и тех же версиях. Вам нужно будет синхронизировать их с настольными клиентами. Процедура обновления может быть сложной. Вам не нужен HTTP-сеанс, если это всего лишь один HTTP POST. Вам нужно будет поддерживать сеанс по HTTP-запросам. –

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