Мы размещаем сотни файлов изображений на 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.
Я думаю, должен быть лучший способ.