1

ユーザーがローカルディレクトリに同期する必要がある何百もの画像ファイルを Amazon S3 に配置しました。ストレージスペースと帯域幅を節約するために、S3 に保存されているファイルを圧縮します。

ユーザー側には、5 分ごとに実行される python スクリプトがあり、現在のファイル リストを取得し、新しいファイルや更新されたファイルをダウンロードします。

私の質問は、ダウンロードする新しいものまたは変更されたものを判断する最良の方法は何ですか?

現在、非圧縮ファイルの MD5 値を含む圧縮ファイルに追加するヘッダーを追加しています...

次のようなファイルから始めます。

image_file_1.tif   17MB    MD5 = xxxx1234

それを (7zip で) 圧縮し、S3 に置きます (Python/Boto で):

image_file_1.tif.z  9MB    MD5 = yyy3456    x-amz-meta-uncompressedmd5 = xxxx1234

問題は、S3 から x-amz-meta-uncompressedmd5 ヘッダーを含むファイルの大きなリストを取得できないことです (数百/数千のファイルでは SLOW)。

私たちの最も実用的な解決策は、ユーザーにファイルの完全なリストを取得させ (余分なヘッダーを除く)、ローカルに存在しないファイルをダウンロードさせることです。ローカルに存在する場合は、追加の API 呼び出しを実行して完全なヘッダーを取得し、ローカルの MD5 チェックサムを x-amz-meta-uncompressedmd5 と比較します。

もっと良い方法があるに違いないと思っています。

4

1 に答える 1

2

圧縮されていない画像のMD5ハッシュを圧縮されたファイル名に含めることができます。

したがって、image_file_1.tifはimage_file_1.xxxx1234.tif.zになる可能性があります

したがって、同期を行うユーザーpythonファイルには、S3からファイルを再度取得する必要があるかどうかを判断するために必要な情報が含まれ、ファイル名のMD5部分を削除するか、必要に応じて維持することができます。行う。

または、S3で、MD5メタデータを含む完全なファイルリストを含む単一のファイルを維持することもできます。したがって、Pythonスクリプトは、その単一のファイルをフェッチし、それを解析してから、何をするかを決定する必要があります。

于 2011-04-29T08:26:24.633 に答える