AWS: ускоряет копирование большого количества очень маленьких файлов

#amazon-web-services #amazon-s3 #aws-cli

#amazon-web-services #amazon-s3 #aws-cli

Вопрос:

У меня есть одно ведро с большим количеством очень маленьких текстовых файлов (от 500 байт до 1,2 тыс.). В настоящее время эта корзина содержит более 1,7 миллиона файлов и будет постоянно увеличиваться.

Я добавляю данные в эту корзину путем создания пакетов файлов (порядка 50.000 файлов) и переноса этих файлов в корзину.

Теперь проблема заключается в следующем. Если я передаю файлы один за другим в цикле, это занимает невероятно много времени. Итак, если все файлы a в каталоге origin_directory , я бы сделал

 aws s3 cp origin_directory/filename_i s3://my_bucket/filename_i
 

Я бы выполнил эту команду 50000 раз.

Сейчас я тестирую это на наборе из примерно 280 тыс. файлов. По моим расчетам, это займет около 68 часов. Однако я обнаружил, что могу синхронизировать:

 aws s3 sync origin_directory s3://my_bucket/
 

Теперь это работает намного быстрее. (По моим расчетам, это займет около 5 часов). Однако при синхронизации необходимо определить, что копировать (файлы, присутствующие в каталоге, а не в корзине). Поскольку количество файлов в корзине будет постоянно увеличиваться, я думаю, что с течением времени это будет занимать все больше и больше времени.

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

Итак, мой вопрос в том, есть ли способ запустить «пакетную копию», аналогичную синхронизации, без фактической синхронизации?

Ответ №1:

Вы можете использовать:

 aws s3 cp --recursive origin_directory/ s3://my_bucket/
 

Это то же самое, что и a sync , но он не будет проверять, существуют ли файлы.

Кроме того, см. раздел Использование фильтров исключения и включения, чтобы узнать, как указывать подстановочные знаки (например, все *.txt файлы).

При копировании большого количества файлов с помощью aws s3 sync или aws s3 cp --recursive интерфейс командной строки AWS распараллелит копирование, что значительно ускорит его. Вы также можете поиграть с конфигурацией AWS CLI S3, чтобы потенциально оптимизировать ее для ваших типичных типов файлов (например, копировать больше файлов одновременно).

Комментарии:

1. Потрясающий ответ!!! Спасибо!! Я попробую это, как только смогу!

2. Должен был проверить это сам, но работал, как вы сказали, и я также использовал ссылку, которую вы мне предоставили, чтобы ускорить ее еще больше! Спасибо!

Ответ №2:

попробуйте использовать https://github.com/mondain/jets3t он выполняет ту же функцию, но работает параллельно, поэтому выполнит задание намного быстрее.