2016-04-26 32 views
3

我有一个数据库,超过200万条记录。每个记录都包含一个图像的URL,我需要下载并存储到AWS S3从MongoDB获取大数据的最佳方法

与其一次下载一个,然后一次上传一个,有没有更好的方法来处理这个问题?

我使用Python,因此pymongo目前。

for item in itemsCursor: 
    download_image(item['imageurl') 

def download_image(item): 
    name = 'example.jpg' 
    response = requests.get(url) 
    img = Image.open(StringIO(response.content)) 
    img.save('temp.jpg', "JPEG") 
    s3.meta.client.upload_file('temp.jpg', 'bucket', name) 
+0

grequests https://pypi.python.org/pypi/grequests –

回答

0

做到这一点的最好方法是做批处理和多线程。我已经通过添加带有日期戳记或布尔值的字段来解决类似问题,该字段表示已处理特定项目(或者在这种情况下,指向它在AWS上的文件ID或URL的链接),并编写客户端脚本或应用程序选择一个或一批需要处理的项目并通过它们转移。

当然,确保线程或其他运行脚本的计算机不会因为某个值或某个单独的字段指示某个线程声明了特定的记录而正在处理处理它。

相关问题