Возможно ли выполнить пакетную загрузку на amazon s3?
Поддерживает ли amazon s3 пакетную загрузку?
У меня есть работа, которая должна загружать каждую ночь ~ 100 тыс. Файлов, которые могут быть до 1 Гб, но сильно искажены в сторону небольших файлов (90% составляют менее 100 байт и 99% меньше 1000 байтов).
Поддерживает ли s3 API загрузку нескольких объектов в одном HTTP-вызове?
Все объекты должны быть доступны в S3 как отдельные объекты. Я не могу размещать их где-нибудь еще (FTP и т.д.) Или в другом формате (база данных, локальный диск EC2 и т.д.). Это внешнее требование, которое я не могу изменить.
Ответы
Ответ 1
Поддерживает ли s3 API загрузку нескольких объектов в одном HTTP-вызове?
Нет, операция S3 PUT поддерживает только загрузку одного объекта за HTTP-запрос.
Вы можете установить S3 Tools на свой компьютер, который вы хотите синхронизировать с удаленным ведром, и выполнить следующую команду:
s3cmd sync localdirectory s3://bucket/
Затем вы можете поместить эту команду в script и создать запланированное задание для запуска этой команды каждую ночь.
Это должно делать то, что вы хотите.
Инструмент выполняет синхронизацию файлов на основе хэшей MD5 и файлов, поэтому столкновение должно быть редким (если вы действительно хотите, чтобы вы могли просто использовать команду "s3cmd put", чтобы заставить слепую перезапись объектов в вашем целевом ковше).
РЕДАКТИРОВАТЬ. Также убедитесь, что вы прочитали документацию на сайте, который я связал для S3 Tools. Существуют разные флаги, необходимые для удаления файлов, удаленных локально, из ведра или игнорируемых и т.д.
Ответ 2
В качестве альтернативы вы можете загрузить S3 через инструмент AWS CLI с помощью команды sync.
aws s3 sync local_folder s3://bucket-name
Вы можете использовать этот метод для быстрой загрузки файлов на S3.
Ответ 3
Один файл (или часть файла) = один HTTP-запрос, но API-интерфейс Java теперь поддерживает эффективную загрузку нескольких файлов без необходимости писать многопоточность самостоятельно, используя TransferManager