2009-03-31 6 views
9

Also ich weiß, das ist eine häufige Frage, aber es scheint einfach keine guten Antworten dafür zu geben.Wie lösche/zähle ich Objekte in einem s3-Bucket?

Ich habe einen Eimer mit Tropfen (ich habe keine Ahnung, wie viele) Anzahl der Dateien in ihnen. Sie sind alle in 2k Stück.

1) Wie finde ich heraus, wie viele dieser Dateien habe ich ohne Auflistung sie? Ich habe die s3cmd.rb, aws/s3 und jets3t Zeug verwendet und das Beste, was ich finden kann, ist ein Befehl zum Zählen der ersten 1000 Datensätze (wirklich GETS auf ihnen durchzuführen).

Ich habe auch das Applet von jets3t verwendet, weil es wirklich schön ist, mit zu arbeiten, aber auch, dass ich nicht alle meine Objekte auflisten kann, weil ich keinen Platz mehr im Heap habe. (vermutlich weil es GETS auf allen von ihnen macht und sie in Gedächtnis behält)

2) Wie kann ich gerade einen Eimer löschen? Das Beste, was ich gesehen habe, ist eine parallelisierte Löschschleife und das hat Probleme, weil es manchmal versucht, die gleiche Datei zu löschen. Das ist es, was alle "deleteall" -Befehle, die ich überliefert habe, tun.

Was machst du, die sich geprahlt haben über das Hosting von Millionen von Bildern/Txts? Was passiert, wenn Sie es entfernen möchten?

3) Zuletzt gibt es alternative Antworten darauf? All diese Dateien sind txt/xml-Dateien, deshalb bin ich mir nicht einmal sicher, ob S3 so ein Problem ist - vielleicht sollte ich das in eine Art von Dokumenten-Datenbank verschieben?

Worauf es ankommt ist, dass die Amazon S3 API gerade gerade 2 sehr wichtige Operationen - COUNT und DEL_BUCKET fehlt. (Tatsächlich gibt es einen Lösch-Bucket-Befehl, aber es funktioniert nur, wenn der Bucket leer ist). Wenn jemand eine Methode entwickelt, die diese beiden Operationen nicht ablöst, würde ich gerne eine Menge Bounty aufgeben.

UPDATE

einfach ein paar Fragen zu beantworten. Der Grund, warum ich das frage, war, dass ich im letzten Jahr Hunderttausende gespeichert habe, mehr wie Millionen von 2k TXT- und XML-Dokumenten. Das letzte Mal, vor ein paar Monaten, wollte ich den Eimer löschen, für den er buchstäblich DAYS brauchte, weil der Eimer leer sein muss, bevor man ihn löschen kann. Das war so eine Nervensäge, dass ich befürchte, dass ich das jemals wieder tun müsste, ohne API-Unterstützung dafür.

UPDATE

diese rockt das Haus!

http://github.com/SFEley/s3nuke/

rm'd ich ein gutes paar Gigs im Wert von 1-2k Dateien innerhalb weniger Minuten.

Antwort

1

Ich bin ganz sicher nicht einer dieser Leute, die sich damit rühmten, Millionen von Bildern/T-Texten zu hosten, da ich nur ein paar tausend habe, und das mag nicht die Antwort sein, die Sie suchen vor einer Weile zurück.

Von was ich erinnere, gibt es einen API-Befehl namens HEAD, der Informationen über ein Objekt erhält, anstatt das vollständige Objekt abzurufen, was GET tut, was beim Zählen der Objekte helfen kann.

Was das Löschen von Buckets betrifft, hat die API zu dem Zeitpunkt, als ich gesucht habe, definitiv angegeben, dass der Bucket leer sein muss. Daher müssen Sie zuerst alle Objekte löschen.

Aber ich habe nie einen dieser Befehle benutzt, weil ich S3 als Backup benutzte und am Ende habe ich ein paar Routinen geschrieben, die die Dateien, die ich S3 wollte (so dass Teil automatisiert wurde), hochgeladen, aber nie belästigt mit der Seite zum Wiederherstellen/Löschen/Dateimanagement der Gleichung. Dafür benutze den Bucket Explorer, der alles was ich brauche. In meinem Fall war es nicht wert, Zeit zu verbringen, wenn ich für 50 Dollar ein Programm bekomme, das alles tut, was ich brauche. Es gibt wahrscheinlich andere, die das gleiche tun (z. B. CloudBerry)

In Ihrem Fall, mit Bucket Explorer, können Sie mit der rechten Maustaste auf einen Eimer und wählen Sie löschen oder mit der rechten Maustaste und wählen Sie Eigenschaften und es zählt die Anzahl der Objekte und Größe nehmen sie auf. Es lädt sicherlich nicht das ganze Objekt herunter. (ZB der letzte Eimer, den ich sah, war 12Gb und ungefähr 500 Akten und es würde Stunden dauern, 12GB herunterzuladen, während die Größe und die Zählung in einer Sekunde oder zwei zurückgebracht werden). Und wenn es ein Limit gibt, dann ist es sicher nicht 1000.

Hoffe das hilft.

0

1) In Bezug auf Ihre erste Frage können Sie die Elemente in einem Bucket auflisten, ohne sie tatsächlich abzurufen. Sie können dies sowohl mit der SOAP als auch der REST API tun. Wie Sie sehen, können Sie die maximale Anzahl der aufzulistenden Elemente und die Position festlegen, von der aus die Liste beginnen soll (der Marker). Lesen Sie mehr darüber here.

Ich kenne keine Implementierung des Paging, aber vor allem für die REST-Schnittstelle wäre es sehr einfach, es in jeder Sprache zu implementieren.

2) Ich glaube, die einzige Möglichkeit, einen Bucket zu löschen, besteht darin, ihn zuerst aus allen Elementen zu löschen. Siehe auch diese question.

3) Ich würde sagen, dass S3 sehr gut zum Speichern einer großen Anzahl von Dateien geeignet ist. Es hängt jedoch davon ab, was Sie tun möchten. Möchten Sie auch Binärdateien speichern? Müssen Sie irgendwelche Abfragen ausführen oder nur die Dateien aufzulisten ist genug?

+0

sogar die Schlüssel zu 1000 Zeit oder was auch immer die Nummer war - das dauerte ewig - mehr als einen Nachmittag und ich tötete es schließlich, nachdem ich gelangweilt und bemerkte, dass mein Haufen viel zu überfüllt war. – eyberg

+0

Ich glaube nicht, dass es einen API-Aufruf gibt, um nur die Anzahl der Elemente zu erhalten. Wahrscheinlich haben Sie ein Werkzeug benutzt, das auch den Inhalt der Dateien bekommt - deshalb hat es so lange gedauert. Verwenden Sie einfach Fiddler oder ein anderes Tool, um die GET-Bucket-Anfrage zu senden (siehe den REST-API-Link in meiner Antwort). Es sollte nicht lange dauern, um die XML zurück zu bekommen. Ich habe Angst, dass ich nicht so einen großen Eimer habe, um es selbst zu testen. – kgiannakakis

1

"Liste" wird die Daten nicht abrufen. Ich benutze s3cmd (ein Python-Skript) und ich würde so etwas getan haben:

s3cmd ls s3://foo | awk '{print $4}' | split -a 5 -l 10000 bucketfiles_ 
for i in bucketfiles_*; do xargs -n 1 s3cmd rm < $i & done 

Aber zuerst prüfen, wie viele bucketfiles_ Dateien, die Sie erhalten. Es wird eine s3cmd pro Datei geben.

Es wird eine Weile dauern, aber nicht Tage.

+0

Ich habe diese Methode tatsächlich ausprobiert - ich bin gerade zu dem Schluss gekommen, dass S3 das Löschen von Buckets im Moment nicht unterstützen kann, und dass es mit seiner horrenden Zugriffsgeschwindigkeit einen extrem bitteren Geschmack in meinem Mund für S3 hinterlässt. – eyberg

+0

s3cmd del 's3cmd ls s3: // Meinbigbucket/somepattern | awk '{print $ 4}' '. Ja, das ist schmerzhaft – BozoJoe

0

Ich hatte das gleiche Problem mit dem Löschen von Hunderttausenden von Dateien aus einem Eimer. Es kann sich lohnen, eine EC2-Instanz zu starten, um das parallele Löschen auszuführen, da die Latenz zu S3 niedrig ist. Ich denke, es ist etwas Geld zu verdienen, um eine Menge EC2-Server zu hosten und die Leute dazu zu bringen, Buckets schnell zu löschen. (Zumindest bis Amazon die API ändert)

0

Alter Thread, aber immer noch relevant, da ich auf der Suche nach der Antwort war, bis ich gerade herausgefunden habe. Ich wollte eine Dateizählung mit einem GUI-basierten Tool (d. H. Kein Code). Ich benutze bereits ein Werkzeug namens 3Hub für Drag & Drop-Transfers zu und von S3. Ich wollte wissen, wie viele Dateien ich hatte in einem bestimmten Eimer (ich glaube nicht, Abrechnung bricht es durch Eimer).

So, using 3Hub, 
- list the contents of the bucket (looks basically like a finder or explorer window) 
- go to the bottom of the list, click 'show all' 
- select all (ctrl+a) 
- choose copy URLs from right-click menu 
- paste the list into a text file (I use TextWrangler for Mac) 
- look at the line count 

hatte ich 20521 Dateien auf den heißen Stein und hat die Dateianzahl in weniger als einer Minute.

Ich würde gerne wissen, ob jemand einen besseren Weg gefunden hat, da dies einige Hunderttausende von Dateien dauern würde.

0

Um Objekte in einem S3 Eimer zählen:

Zum AWS Billing, dann meldet, dann Berichte Verwendung AWS. Wählen Sie Amazon Simple Storage Service und dann Operation StandardStorage. Laden Sie eine CSV-Datei herunter, die einen UsageType von StorageObjectCount enthält, der die Elementanzahl für jeden Bucket auflistet.

+0

Wo ist der zweite Weg zu zählen? – Volte

Verwandte Themen