为什么亚马逊建议在 S3 下载期间尽快读取“所有数据”?

为什么亚马逊建议在 S3 下载期间尽快读取“所有数据”?

在阅读官方文档在 Amazon S3 Java SDK 上,我发现了一个有趣的说明:

您的网络连接保持打开状态,直到您读取所有数据或关闭输入流。我们建议您尽快读取流的内容。

我的问题是,为什么亚马逊建议尽快读取数据,而不是将其流式传输到数据管道中,以便逐行处理数据?我在亚马逊的文档网站和定价页面上都找不到答案。没有任何地方提到长寿命的 HTTP 连接会花费更多。因此,希望社区能提供一些意见。

谢谢

答案1

原因是您实际上是¹直接从网络套接字读取字节。 SDK 不会为您在内存或磁盘上缓冲整个对象。

S3 服务(与任何 Web 服务一样)不会容忍客户端在套接字上过度停顿/阻塞。服务规定的具体超时时间没有记录,但此警告背后的想法是,您不想只是把它放在一边并期望它会保持无限可用状态——就像一切都被提取并存储在本地某处一样。

您的阅读速度快慢不会对财务产生影响。这关乎可靠性,因为闲置/停滞的 TCP 连接最终将被关闭。S3 不会在同一个套接字上多路复用多个同时进行的操作,因此如果连接意外关闭,与服务的其他交互不会受到影响。

如果效率高的话,这个建议不一定排除逐行流处理。


¹本质上但不完全是,因为 TLS。

相关内容