繁体   English   中英

Boto3 put_object()非常慢

[英]Boto3 put_object() is very slow

TL; DR:尝试使用Boto3将.json文件放入S3存储桶中,过程非常缓慢。 寻找加快速度的方法。

这是我关于SO的第一个问题,因此,如果我遗漏任何重要细节,我深表歉意。 本质上,我试图使用Boto3从Elasticsearch提取数据并将其存储在S3存储桶中。 我提到这篇文章是使用ES Python客户端的滚动功能提取多个ES数据页面。 滚动时,我正在处理数据,并使用[timestamp] .json格式将其放入存储桶中,方法如下:

    s3 = boto3.resource('s3')
    data = '{"some":"json","test":"data"}'
    key = "path/to/my/file/[timestamp].json"      
    s3.Bucket('my_bucket').put_object(Key=key, Body=data)

在计算机上运行此程序时,我注意到此过程非常缓慢。 使用line profiler ,我发现该行在整个程序中消耗了96%的时间:

    s3.Bucket('my_bucket').put_object(Key=key, Body=data)

我可以进行哪些修改以加快此过程? 请记住,我正在程序中创建.json文件(每个文件约为240个字节),然后将它们直接流式传输到S3,而不是在本地保存它们并上传文件。 提前致谢。

由于您可能要上传许多小文件,因此应考虑以下几点:

  • 某种形式的线程/多处理。 例如,您可以看到如何在Python中有效地将小文件上传到Amazon S3
  • 创建包含少量数据块集的某种形式的存档文件(ZIP),并将其上传为较大的文件。 当然,这取决于您的访问模式。 如果您走这条路,请务必使用boto3 upload_fileupload_fileobj方法,因为它们将处理多部分上传和线程处理。
  • 请求率和性能注意事项中所述,S3对性能的影响

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM