Назад | Перейти на главную страницу

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

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

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

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

Спасибо

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

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

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

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


¹ по существу но не совсем так, потому что TLS.