Сравниваете несжатые локальные файлы со сжатыми файлами, хранящимися на Amazon S3? - PullRequest
1 голос
/ 24 июня 2010

Мы поместили сотни файлов изображений на 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.

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

1 Ответ

2 голосов
/ 29 апреля 2011

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

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

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

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

...