AWS підтримує масове видалення до 1000 об'єктів на запит, використовуючи API SEST REST та його різні обгортки. Цей метод передбачає, що ви знаєте об'єктні ключі 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 faq, які масово видаляють, є шлях, якщо це можливо.
aws s3api list-objects --output text --bucket BUCKET --query 'Contents[].[Key]' | pv -l > BUCKET.keys
а потім видалення об'єктів (цього було достатньо, щоб перехід 1 паралельного процесу досягнув обмежень швидкості для видалення об'єкта):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"' _