我有一个数据库,超过200万条记录。每条记录都包含一个图像的URL,我需要下载并存储到 AWS S3 。
不是每次下载一个,而是一次上传一个,是否有更好的方法来解决这个问题?
我正在使用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 :(得分:0)
执行此操作的最佳方法是进行批处理和多线程处理。我通过添加一个带有日期戳或布尔值的字段来解决类似问题,该字段指示特定项目已被处理(或者在这种情况下,可能是指向它的链接,在AWS上提供文件ID或URL)并编写客户端脚本或应用程序将选择一个或一批需要处理并通过它们进行流失的项目。
当然,请确保运行脚本的线程或其他计算机不会通过创建特定值或甚至单独的字段来跳过彼此,表明某个线程声明了特定记录并且正在进行处理它。