2016-04-26 11 views
3

私は200万レコード以上のデータベースを持っています。各レコードには、AWS S3のにダウンロードして保存する必要がある画像のURLが含まれています。MongoDBから大きなデータを取得するための最善のアプローチ

一度に1つずつダウンロードし、一度に1つずつアップロードするのではなく、これに対処するより良い方法がありますか?

私は現在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へのリンク)を指定し、クライアントスクリプトまたはアプリケーションを記述することで、同様の問題を解決しました。処理が必要な項目の1つまたは複数のバッチを選択し、それらの項目を移動します。

もちろん、スクリプトを実行しているスレッドや他のコンピュータは、スレッドが特定のレコードを主張して処理中であることを示すために、特定の値や別のフィールドを作成することによって、それを処理する。

関連する問題