AWS unterstützt das Massenlöschen von bis zu 1000 Objekten pro Anforderung mithilfe der S3-REST-API und ihrer verschiedenen Wrapper. Bei dieser Methode wird davon ausgegangen, dass Sie die zu entfernenden S3-Objektschlüssel kennen (dh, sie sind nicht für die Verarbeitung von Aufbewahrungsrichtlinien, Dateien mit einer bestimmten Größe usw. ausgelegt).
Die S3-REST-API kann angeben, dass bis zu 1000 Dateien in einer einzelnen Anforderung gelöscht werden sollen. Dies muss schneller sein als das Ausführen einzelner Anforderungen. Denken Sie daran, dass jede Anforderung eine HTTP-Anforderung (also eine TCP-Anforderung) ist. Daher ist jede Anforderung mit einem Mehraufwand verbunden. Sie müssen nur die Schlüssel der Objekte kennen und eine HTTP-Anfrage erstellen (oder einen Wrapper in der Sprache Ihrer Wahl verwenden). AWS bietet hervorragende Informationen zu dieser Funktion und ihrer Verwendung . Wählen Sie einfach die Methode, mit der Sie sich am wohlsten fühlen!
Ich gehe davon aus, dass in Ihrem Anwendungsfall Endbenutzer eine Reihe bestimmter Dateien angeben, die gleichzeitig gelöscht werden sollen. Anstatt eine Aufgabe wie "Alle Objekte löschen, die auf Bilddateien verweisen" oder "Alle Dateien löschen, die älter als ein bestimmtes Datum sind" zu starten (was meines Erachtens in S3 einfach zu konfigurieren ist).
In diesem Fall kennen Sie die Schlüssel, die Sie löschen müssen. Dies bedeutet auch, dass der Benutzer mehr Echtzeit-Feedback darüber erhalten möchte, ob seine Datei erfolgreich gelöscht wurde oder nicht. Die Verweise auf exakte Schlüssel sollten sehr schnell sein, da S3 so konzipiert wurde, dass es trotz der Verarbeitung einer extrem großen Datenmenge effizient skaliert.
Wenn nicht, können Sie asynchrone API-Aufrufe untersuchen. In diesem Blogbeitrag können Sie nachlesen, wie sie im Allgemeinen funktionieren würden, oder nach Anleitungen in der Sprache Ihrer Wahl suchen. Auf diese Weise kann die Löschanforderung einen eigenen Thread belegen, und der Rest des Codes kann ausgeführt werden, ohne dass ein Benutzer wartet. Sie können die Anforderung auch in eine Warteschlange verschieben. . . Beide Optionen erschweren jedoch unnötigerweise entweder Ihren Code (asynchroner Code kann ärgerlich sein) oder Ihre Umgebung (Sie benötigen einen Service / Daemon / Container / Server für die Verarbeitung der Warteschlange. Daher würde ich dieses Szenario nach Möglichkeit vermeiden.
Bearbeiten: Ich habe nicht den Ruf, mehr als 2 Links zu posten. Aber Sie hier Amazon Kommentare auf Anfrage Preis und Leistung sehen: http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html Und die s3 FAQ Kommentare , die Masse deleiton ist die weit, wenn möglich.
aws s3api list-objects --output text --bucket BUCKET --query 'Contents[].[Key]' | pv -l > BUCKET.keys
Und dann Objekte entfernen (das hat ausgereicht, dass durch das Überschreiten von 1 parallelen Prozess die Ratenbeschränkungen für das Löschen von Objekten erreicht wurden):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"' _