Там есть конечная точка REST, которая обслуживает большие (десятки гигабайт) куски данных для моего приложения.
Приложение обрабатывает данные в своем собственном темпе, и по мере роста объемов входящих данных я начинаю использовать тайм-аут конечной точки REST.
Значение, скорость обработки меньше, чем пропускная способность сети.
К сожалению, нет возможности повысить скорость обработки, так как нет "достаточно" - объемы входящих данных могут расти неограниченно.
Я думаю о способе хранения входящих данных локально перед обработкой, чтобы освободить соединение конечной точки REST до истечения тайм-аута.
До сих пор я до сих пор загружал входящие данные во временный файл и считывал (обрабатывал) указанный файл одновременно с помощью OutputStream/InputStream.
Сортировка буферизации с использованием файла.
Это создает собственные проблемы:
- что, если скорость обработки будет быстрее, чем скорость загрузки в течение некоторого времени, и я получу EOF?
- файловый парсер работает с ObjectInputStream и ведет себя странно в случае пустого файла /EOF
- и так далее
Существуют ли обычные способы сделать это?
Существуют ли альтернативные решения?
Просьба дать некоторые рекомендации.
Upd:
Я хотел бы отметить: http-сервер не в моем распоряжении.
Предположите, что это поставщик данных поставщика. У них много потребителей и они отказываются что-то менять только для одного.
Похоже, мы единственные, кто использует все свои данные, так как скорость обработки клиентских приложений намного больше, чем их примерные показатели производительности клиента. Тем не менее, мы не можем сопоставить нашу производительность приложения с пропускной способностью сети.
Сервер не поддерживает запросы HTTP-диапазона или разбиение на страницы.
Невозможно разделить данные в кусках, чтобы не загружать, так как нет атрибута фильтрации, чтобы гарантировать, что каждый кусок будет достаточно маленьким.
В ближайшее время: мы можем загрузить все данные за определенный период времени до истечения тайм-аута, но не можем его обработать.
Наличие адаптера между входным потоком и outpustream для pefrorm в качестве блокирующей очереди поможет тонну.