Почему Amazon рекомендует читать "все данные" как можно быстрее во время загрузки S3?

Читая официальную документацию по Amazon S3 Java SDK, я обнаружил интересную заметку:

Ваше сетевое соединение остается открытым, пока вы не прочитаете все данные или не закроете поток ввода. Мы рекомендуем вам прочитать содержимое потока как можно быстрее.

Мой вопрос: почему Amazon рекомендует читать данные как можно скорее, а не, скажем, передавать их в конвейер данных, где мы можем обрабатывать данные построчно? Я не смог найти ответ ни на веб-сайте документации Amazon, ни на их страницах с ценами. Нигде не упоминается, что долгоживущее HTTP-соединение будет стоить дороже. Поэтому ищу какой-то вклад со стороны сообщества.

Спасибо

1 ответ

Решение

Причина в том, что вы, по сути, читаете байты непосредственно из сетевого сокета. SDK не буферизует весь объект в памяти или на диске для вас.

Сервис S3, как и любой веб-сервис, не допустит чрезмерных остановок / блокировок на сокете со стороны клиента. Конкретные тайм-ауты, навязанные службой, не задокументированы, но идея этого предупреждения заключается в том, что вы не хотите просто оставлять это без дела и ожидать, что оно останется бесконечно доступным - как если бы все было извлечено и спрятано где-то локально

Нет никакого финансового влияния на то, как быстро или медленно вы читаете. Речь идет о надежности, так как оставленное / неактивное TCP-соединение в конечном итоге будет закрыто. S3 не мультиплексирует несколько одновременных операций в одном сокете, поэтому никакие другие взаимодействия со службой не будут затронуты, если соединение будет неожиданно закрыто.

Эта рекомендация не обязательно исключает построчную обработку потока, если она выполняется эффективно.


¹ по сути, но не совсем, потому что TLS.

Другие вопросы по тегам