У меня есть одно ведро с большим количеством очень маленьких текстовых файлов (от 500 байт до 1,2 КБ). В настоящее время эта корзина содержит более 1,7 миллиона файлов и будет постоянно увеличиваться.
Я добавляю данные в это ведро, создавая пакеты файлов (порядка 50 000 файлов) и передавая эти файлы в ведро.
Теперь проблема вот в чем. Если я передаю файлы один за другим в цикле, это занимает невыносимо много времени. Итак, если бы все файлы находились в каталоге 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 часов, по моим расчетам). Однако при синхронизации необходимо выяснить, что копировать (файлы, присутствующие в каталоге и отсутствующие в корзине). Поскольку файлы в ведре будут постоянно увеличиваться, я думаю, что это будет занимать все больше и больше времени с течением времени.
Однако, поскольку я удаляю информацию после каждой синхронизации, я знаю, что операция синхронизации должна передавать все файлы в этом каталоге.
Итак, мой вопрос: есть ли способ запустить «пакетную копию», аналогичную синхронизации, без фактической синхронизации?
Вы можете использовать:
aws s3 cp --recursive origin_directory/ s3://my_bucket/
Это то же самое, что и sync
, но не проверяет, существуют ли уже файлы.
Также см. Использование фильтров исключения и включения, чтобы узнать, как указать подстановочные знаки (например, все *.txt
файлы).
При копировании большого количества файлов с помощью aws s3 sync
или aws s3 cp --recursive
интерфейс командной строки AWS будет распараллеливать копирование, что значительно ускорит его. Вы также можете поиграть с Конфигурацией AWS CLI S3, чтобы потенциально оптимизировать ее для типичных типов файлов (например, копировать больше файлов одновременно).
Пришлось проверить это самому, но сработало, как вы сказали, и я также использовал ссылку, которую вы мне предоставили, чтобы ускорить ее еще больше! Спасибо!
попробуйте использовать https://github.com/mondain/jets3t он выполняет ту же функцию, но работает параллельно, поэтому он завершит работу намного быстрее.
Удивительный ответ!!! Спасибо!! Я попробую, как только смогу!