Получить большой объем данных в Java Web App и загрузить его на клиент - PullRequest
0 голосов
/ 28 ноября 2018

Дано:

  • веб-приложение, работающее на websphere и база данных Oracle с большими таблицами
  • веб-сайт jsf, который позволяетпользователь загружает части данных в csv файлах.
  • Обычный способ доступа к БД - через JPA (openJPA)
  • потенциальный размер загружаемого файла - до 500 МБ до 1 ГБ

Проблема:

Как разрешить пользователю загружать такие большие экспорты данных из БД через веб-приложение на свой клиентский жесткий диск без исключений OutOfMemory / сохранение / буферизация полных данных на сервере

1 Ответ

0 голосов
/ 28 ноября 2018

Вы, вероятно, столкнетесь с рядом ограничений, пытаясь сделать это в одном HTTP-запросе.

Потоковая и асинхронная обработка - два возможных решения.

Потоковая

Похоже, В JPA 2.2 добавлена ​​поддержка потоковой передачи .Чтобы избежать нехватки памяти, вам, вероятно, потребуется настроить JVM, вам также, вероятно, потребуется настроить размер выборки JDBC, чтобы сбалансировать производительность вашей БД и производительность вашего клиента.

Затем вы можете выполнять потоковую / буферную передачу.результаты возвращаются клиенту.

Однако при таком подходе есть проблемы.Что происходит при кратковременной потере сетевого соединения?Кто-то случайно закрыл свой браузер, предоставив заголовки ответа Content-Length для определения оставшегося времени и т. Д.?Лучший подход:

Асинхронный

Шаги могут выглядеть примерно так:

  1. Клиент отправляет запрос на сервер.
  2. Сервер запускает асинхронный процесс (веб-работник или JMS).
  3. Асинхронный процесс создает файл и временно сохраняет его в файловой системе.
  4. Когда процесс завершается, он отправляет электронное письмоклиенту забрать свой файл.Это называется проверкой претензий.Вместо электронного письма это также может быть возвращенный URL-адрес, который пользователь затем может обновить, чтобы увидеть, когда его файл будет готов к загрузке.
  5. По истечении «разумного» промежутка времени, когда файл будет удален.

Этот подход может быть настроен для обеспечения возможности автоматического возобновления и устранения неопределенности в сети, и вкладка браузера закрывается из уравнения.В целом, это также облегчает необходимость обработки повторных запросов.Использование JMS также дает возможность масштабировать это решение по горизонтали, а не по вертикали.

...