2017-09-15 160 views
1

我想移动约1个百万个文件从Azure存储到S3。我使用Azure python sdk和boto3编写了这个python脚本。有效地从Azure的Blob存储的数据复制到S3

marker = None 
while True: 
    batch = azure_blob_service.list_blobs(
     container, marker=marker) 
    # copy blobs in batches 
    for blob in batch: 
     blob_name = blob.name 
     current_blob = azure_blob_service.get_blob_to_bytes(
      copy_from_container, blob_name) 
     s3_client.put_object(
      Body=current_blob.content, 
      Bucket=s3_bucket, 
      ContentType=current_blob.properties.content_settings.content_type, 
      Key=blob_name) 
    if not batch.next_marker: 
     break 
    marker = batch.next_marker 

但是这很慢。

我怎样才能有效地从蔚蓝的数据移动到S3?

+0

它已经很长了我与S3工作,所以我可能是错的,但S3不支持服务器端复制。正确?只有您可用的选项是从Azure将Blob下载到本地磁盘,然后将其上传回S3。对? –

+0

@GauravMantri是的,我没有找到类似的东西。我也在做类似于你的事情。但不是将它们下载到磁盘,而是使用'get_blob_to_bytes',然后将其上传到S3。 –

+0

'get_blob_to_bytes' ....你仍然在下载数据。你没有做的是将这些数据保存到本地磁盘,所以从网络的角度来看,你没有获得任何东西。 –

回答

2

考虑到S3不支持像Azure Blob存储这样的服务器端异步复制blob,为了将数据从Azure存储移动到S3,您需要先从Azure存储中下载blob,然后将它们上传到S3。当您下载并上传大量数据时,这就是互联网速度起作用的地方。

如果你想加快整个过程中的一个替代方案是在亚马逊本身就是一个虚拟机(最好在同一个区域作为您的S3帐户)运行此脚本。这样,你就可以下载速度更快,然后将其上传速度以及你将在同一区域进行上传(假设亚马逊比你目前有提供了更好的上网速度)。

+0

目前我正在Azure虚拟机上执行此操作。它会在EC2上做出改变吗? –

+0

嗯.....有趣的问题。我认为如果我们采用相同配置的虚拟机,那么它应该差不多一样。您的Azure虚拟机和存储帐户是否位于同一区域? –

+0

编号Azure虚拟机和存储位于一个区域,而S3位于另一个区域。 –

相关问题