ユーザーがローカルディレクトリに同期する必要がある何百もの画像ファイルを 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 と比較します。
もっと良い方法があるに違いないと思っています。