Сравнивать несжатые локальные файлы со сжатыми файлами, хранящимися на Amazon S3?

Мы размещаем сотни файлов изображений на Amazon S3, которые наши пользователи должны синхронизировать со своими локальными каталогами. Чтобы сэкономить место для хранения и пропускную способность, мы архивируем файлы, хранящиеся на S3.

Со стороны пользователя у них есть скрипт Python, который запускается каждые 5 минут, чтобы получить текущий список файлов и загрузить новые/обновленные файлы.

Мой вопрос: как лучше всего определить, что нового или измененного загрузить?

В настоящее время мы добавляем дополнительный заголовок, который мы помещаем со сжатым файлом, который содержит значение 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 без дополнительного API для КАЖДОГО (МЕДЛЕННО для сотен/тысяч файлов).

Наше наиболее практичное решение — предоставить пользователям полный список файлов (без дополнительных заголовков), загрузить файлы, которые не существуют локально. Если он существует локально, выполните дополнительный вызов API, чтобы получить полные заголовки для сравнения локальной контрольной суммы MD5 с x-amz-meta-uncompressedmd5.

Я думаю, должен быть лучший способ.


person RP.    schedule 24.06.2010    source источник


Ответы (1)


Вы можете включить хэш MD5 несжатого изображения в имя сжатого файла.

Таким образом, image_file_1.tif может стать image_file_1.xxxx1234.tif.z.

Таким образом, ваш пользовательский файл python, который выполняет синхронизацию, будет иметь информацию, необходимую для определения необходимости повторного получения файла с S3, и может либо удалить часть MD5 имени файла, либо сохранить ее, в зависимости от того, что вы хотели делать.

Или вы также можете поддерживать на S3 один файл, содержащий полный список файлов, включая метаданные MD5. Таким образом, скрипт Python просто должен получить этот единственный файл, проанализировать его, а затем решить, что делать.

person liamf    schedule 29.04.2011
comment
Чтобы не путаться с именами файлов, вы можете создать еще один файл с содержимым MD5, например image_file_1.tif.md5 . - person Pih; 29.04.2011