2013-02-24 12 views
39

Unterstützt amazon s3 Batch-Uploads? Ich habe eine Aufgabe, die jede Nacht ~ 100K Dateien hochladen muss, die bis zu 1G sein kann, aber stark in Richtung kleine Dateien (90% sind weniger als 100 Bytes und 99% sind weniger als 1000 Bytes lang) verzerrt.Ist es möglich, einen Batch-Upload auf Amazon S3 durchzuführen?

Unterstützt die API s3 das Hochladen mehrerer Objekte in einem einzigen HTTP-Aufruf?

Alle Objekte müssen in S3 als einzelne Objekte verfügbar sein. Ich kann sie nirgendwo anders (FTP, etc) oder in einem anderen Format (Datenbank, lokales EC2-Laufwerk usw.) hosten. Das ist eine externe Anforderung, die ich nicht ändern kann.

+2

große Frage mit! gerade aus Neugier können Sie uns sagen, warum, was Sie versuchen zu tun, was sind diese Dateien? –

+0

ist es in Ordnung für mich, diese Fragen zu stellen? –

+0

Ich frage mich, warum eine solche Anforderung erscheint. Wenn Sie alle Dateien gleichzeitig ersetzen müssen, gibt es vielleicht eine Möglichkeit, sie regelmäßig in den temporären Bucket zu laden und dann die Bucket-Namen zu ändern. –

Antwort

23

Hat die s3-API-Unterstützung mehrere Objekte in einem einzigen HTTP-Aufruf Hochladen?

Nein, the S3 PUT operation unterstützt nur das Hochladen eines Objekts pro HTTP-Anforderung.

Sie könnten S3 Tools auf Ihrem Rechner installieren, die Sie mit dem Remote-Eimer synchronisieren möchten, und führen Sie den folgenden Befehl ein:

s3cmd sync localdirectory s3://bucket/ 

Dann könnten Sie diesen Befehl in einem Skript platzieren und einen geplanten Auftrag erstellen laufen diesen Befehl jede Nacht.

Dies sollte tun, was Sie wollen.

Das Tool führt die Dateisynchronisation basierend auf MD5-Hashes und -Dateigröße durch, daher sollte die Kollision selten sein (wenn Sie wirklich wollen, könnten Sie einfach den Befehl "s3cmd put" verwenden, um das blinde Überschreiben von Objekten in Ihrem Ziel-Bucket zu erzwingen).

EDIT: Vergewissern Sie sich auch, dass Sie in der Dokumentation auf der Website habe ich gelesen, für S3-Tools verknüpft - es gibt verschiedene Flaggen für erforderlich, ob Dateien lokal gelöscht wollen aus dem Eimer oder ignoriert usw.

+7

Diese Methode verwendet weiterhin einzelne Put-Operationen und ist nicht von Natur aus schneller als alles andere. Die Antwort wurde akzeptiert, aber es scheint, dass alles, was Sie getan haben, ist, auf ein Werkzeug zu zeigen, das dasselbe tut, was er im Code tun konnte. – bridiver

+0

Sie könnten auch eine Synchronisierung vom Knoten api tun - Auschecken Knoten s3-Client –

+0

s3cmd erfordert eine Lizenz für die weitere Verwendung – Adder

28

Alternativ gelöscht werden Sie können S3 über AWS CLI tool mit dem Befehl sync hochladen.

aws s3 sync local_folder s3: // eimerName

können Sie diese Methode, um Upload-Batch-Dateien S3 sehr schnell verwenden.

+6

wie bei der vorherigen Antwort scheint die Implikation hier zu sein, dass diese Tools irgendwie etwas tun, was nicht kann ansonsten mit der API erreicht werden und ich glaube nicht, dass das der Fall ist – bridiver

+0

Ich verwende derzeit das AWS CLI-Tool, um zwischen einem lokalen Verzeichnis und einem S3-Bucket zu synchronisieren. Ich würde gerne wissen, ob es ein Argument oder einen Parameter gibt, der verwendet werden kann, um die "Upload" - oder Sync-Ergebnisse in eine lokale TXT-Datei auszugeben, die ich dann via blat.exe an jemanden senden kann. All dies soll in eine Batch-Datei für eine geplante Synchronisierung von Tausenden von Dateien, die von unseren anderen Servern heruntergeladen werden sollen. (Verwenden von S3-Bucket als Cloud-Quelle, um Probleme mit der Uploadgeschwindigkeit unseres Quellservers zu beheben.) –

0

Eine Datei (oder einen Teil einer Datei) = eine HTTP-Anforderung, aber die Java-API unterstützt jetzt effizient Hochladen mehrerer Dateien, ohne die Multithreading auf eigene Faust zu schreiben, von TransferManager

Verwandte Themen