AWS, S3 REST API'sini ve çeşitli sarmalayıcılarını kullanarak istek başına 1000 nesneye kadar toplu silme işlemini destekler. Bu yöntem, kaldırmak istediğiniz S3 nesne anahtarlarını bildiğinizi varsayar (yani, saklama politikası, belirli bir boyutun üzerindeki dosyalar vb.) İşlemek için tasarlanmamıştır.
S3 REST API'si, tek bir istekte silinecek 1000 adede kadar dosya belirtebilir ve bu da bireysel isteklerde bulunmaktan daha hızlıdır. Unutmayın, her istek bir HTTP (dolayısıyla TCP) isteğidir. Böylece her istek yükü taşır. Sadece nesnelerin anahtarlarını bilmeniz ve bir HTTP isteği oluşturmanız (veya kendi dilinizde bir sarmalayıcı kullanmanız) yeterlidir. AWS, bu özellik ve kullanımı hakkında harika bilgiler sağlar . Sadece en rahat olduğunuz yöntemi seçin!
Kullanım durumunuzun, bir kerede silinecek belirli dosyaları belirleyen son kullanıcıları içerdiğini varsayıyorum. "Resim dosyalarına atıfta bulunan tüm nesneleri temizle" veya "belirli bir tarihten daha eski tüm dosyaları temizle" (S3'te ayrıca yapılandırmanın kolay olduğuna inanıyorum) gibi bir görevi başlatmak yerine.
Öyleyse, silmeniz gereken anahtarları bilirsiniz. Ayrıca, kullanıcının dosyalarının başarılı bir şekilde silinip silinmediği hakkında daha fazla gerçek zamanlı geri bildirim isteyeceği anlamına gelir. Kesin tuşlara yapılan atıfların çok hızlı olması gerekiyordu, çünkü S3 son derece büyük miktarda veri işlemesine rağmen verimli bir şekilde ölçeklenmek üzere tasarlandı.
Değilse, eşzamansız API çağrılarına bakabilirsiniz. Bu blog gönderisinden genel olarak nasıl çalışacakları hakkında biraz okuyabilir veya istediğiniz dilde nasıl yapılacağını arayabilirsiniz. Bu, silme isteğinin kendi iş parçacığını almasına izin verir ve kodun geri kalanı bir kullanıcıyı bekletmeden yürütülebilir. Veya isteği bir kuyruğa yükleyebilirsiniz. . . Ancak bu seçeneklerin her ikisi de kodunuzu (eşzamansız kod can sıkıcı olabilir) veya ortamınızı (kuyruğu işlemek için bir hizmet / daemon / container / server gerekir) gereksiz yere karmaşık hale getirir.
Düzenleme: 2'den fazla bağlantı yayınlamak için bir üne sahip değilim. Ama burada istek oranı ve performansa Amazon'un yorumları görebilirsiniz: http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html Ve s3 sss yorumlar toplu deleiton olduğunu mümkünse gitmek için bir yol.
aws s3api list-objects --output text --bucket BUCKET --query 'Contents[].[Key]' | pv -l > BUCKET.keys
Ve sonra nesneleri kaldırmak (1 paralel işlemden geçmenin nesne silme için hız sınırlarına ulaşması yeterliydi):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"' _