AWS поддерживает массовое удаление до 1000 объектов за запрос с помощью S3 REST API и его различных оболочек. Этот метод предполагает, что вы знаете, какие ключи объекта S3 вы хотите удалить (то есть он не предназначен для обработки чего-то вроде политики хранения, файлов, размер которых превышает определенный размер и т. Д.).
API SEST REST может указывать до 1000 файлов, которые должны быть удалены за один запрос, что должно быть быстрее, чем выполнение отдельных запросов. Помните, что каждый запрос является запросом HTTP (то есть TCP). Таким образом, каждый запрос несет накладные расходы. Вам просто нужно знать ключи объектов и создать HTTP-запрос (или использовать оболочку на выбранном вами языке). AWS предоставляет отличную информацию об этой функции и ее использовании . Просто выберите метод, который вам наиболее удобен!
Я предполагаю, что ваш вариант использования подразумевает, что конечные пользователи указывают несколько конкретных файлов, которые нужно удалить одновременно. Вместо того, чтобы запускать задачу, такую как «очистить все объекты, которые ссылаются на файлы изображений» или «очистить все файлы, которые старше определенной даты» (что, я считаю, легко настроить отдельно в S3).
Если это так, вы будете знать ключи, которые нужно удалить. Это также означает, что пользователю понравится больше отзывов в реальном времени о том, был ли их файл успешно удален или нет. Ссылки на точные ключи должны быть очень быстрыми, поскольку S3 был разработан для эффективного масштабирования, несмотря на обработку чрезвычайно большого объема данных.
Если нет, вы можете посмотреть на асинхронные вызовы API. Вы можете прочитать немного о том, как они будут работать в целом из этого поста в блоге или найти, как это сделать на выбранном вами языке. Это позволило бы запросу удаления занять свой собственный поток, а остальная часть кода может выполняться, не заставляя пользователя ждать. Или вы можете разгрузить запрос в очередь. , , Но обе эти опции неоправданно усложняют либо ваш код (асинхронный код может раздражать), либо вашу среду (вам понадобится сервис / демон / контейнер / сервер для обработки очереди. Поэтому я бы по возможности избегал этого сценария.
Изменить: у меня нет репутации, чтобы публиковать более 2 ссылок. Но вы можете увидеть комментарии Amazon о частоте запросов и производительности здесь: http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html А часто задаваемые вопросы о s3, которые массовое удаление является путь, если это возможно.
aws s3api list-objects --output text --bucket BUCKET --query 'Contents[].[Key]' | pv -l > BUCKET.keys
и затем удаление объектов (этого было достаточно, чтобы при выполнении одного параллельного процесса достигнут предел скорости удаления объектов):tail -n+0 BUCKET.keys | pv -l | grep -v -e "'" | tr '\n' '\0' | xargs -0 -P1 -n1000 bash -c 'aws s3api delete-objects --bucket BUCKET --delete "Objects=[$(printf "{Key=%q}," "$@")],Quiet=true"' _