#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 он выполняет ту же функцию, но работает параллельно, поэтому выполнит задание намного быстрее.