我正在尝试对超大文件(500GB-5TB)的AWS S3上的上传速度进行一些测试。我目前正在使用boto3
(适用于Python的AWS开发工具包)。与其在我自己的硬盘上创建和存储大量文件,不如直接从/dev/urandom
(或至少/dev/zero
)流式传输。 boto3
的 put_object()可以从流中上传数据,但似乎有5GB的硬限制,这远远低于我需要测试的范围。
我尝试了boto3
的 upload_fileobj(),该文件通过自动使用分段上传来处理较大的对象。它可以在实际文件上正常工作,但是我似乎无法找到一种方法来直接从流中上传数据。我还研究了使用AWS S3命令行界面(CLI)而不是boto3
SDK,但再次想不出一种直接从流中上传数据的方法。
是否有相对简单的方法直接从/dev/urandom
将大量数据上传到AWS S3?
答案 0 :(得分:0)
您不希望直接从/dev/urandom
流式传输,因为它实际上是CPU限制的,而不是IO限制的(您可以在使用top
的同时运行dd
来查看此信息将随机数据流传输到文件中,或者通过比较时间来复制磁盘缓存中尚未存在的现有1GB文件)。
使用Boto3,您需要的呼叫是create_multipart_upload启动上传,upload_part发送每个部分,complete_multipart_upload完成上传。您可以将文件或字节数组传递给upload_part
,因此可以使用内置的随机数生成器(它将足够随机以避免GZip压缩)生成字节数组,或重复读取相同的内容文件(在类似的测试中,我使用了一个1GB的文件,其中包含来自urandom的数据-Gzip不会在这么大的输入空间上为您提供任何压缩)。
但是,整个练习毫无意义。除非您有直接通往Internet主干的千兆管道,否则AWS的速度将比网络快。因此,您真正要测试的是您的网络将字节推入Internet的速度,并且有许多“速度测试”站点将告诉您吞吐量。另外,发送1 TB的内容比发送1 GB的内容要多得多:S3的全部意义在于它可以处理任何内容。