2012-05-01 8 views
6

ich einen Eimer mit zwei Arten von Dateinamen haben:Amazon S3 Umbenennung und Überschreiben von Dateien, Empfehlungen und Risiken

  1. [Bucket]/[file]
  2. [Bucket]/[folder]/[file]

Zum Beispiel könnte ich habe:

  1. MyBucket/bar
  2. MyBucket/foo/bar

Ich möchte alle [Bucket]/[folder]/[file] Dateien [Bucket]/[file] Dateien umbenennen (und damit das Überschreiben/Verwerfen der [Bucket]/[file]-Dateien).
Also wie im vorherigen Beispiel, ich möchte MyBucket/foo/bar werden MyBucket/bar (und überschreiben/duscard das Original MyBucket/bar).

habe ich versucht, zwei Methoden:

  1. s3cmd Umzug Befehl: s3cmd mv s3://MyBucket/foo/bar s3://MyBucket/bar
  2. für PHP Amazon SDK verwenden: rename(s3://MyBucket/foo/bar, s3://MyBucket/bar)

Beide Methoden zu funktionieren scheint, aber - ich habe zu tun, unter Berücksichtigung dies als Batch-Prozess auf Tausende von Dateien,
meine Fragen sind:

  1. Welche Methode wird bevorzugt?
  2. Gibt es andere bessere Methoden?
  3. Muss ich die alten Dateien vor dem Verschieben/Umbenennen löschen? (es scheint ohne es gut zu funktionieren, aber ich könnte nicht bewusst Risiken sein)

Vielen Dank.

+0

Hallo! Ich versuche auch, zu verschieben und überschreiben Ordner (und ihre residierenden Dateien) in einem einzigen Eimer und ich bemerkte, dass Sie: Umbenennen (s3: // MyBucket/foo/bar, s3: // MyBucket/bar). Wie funktioniert das in PHP? Oder funktioniert diese Zeile nur wörtlich auf einem EC2? – Schodemeiss

+0

@AndyBarlow, ich habe einen Beitrag darüber in geschrieben: http://eyalarubas.com/log/2012/10/16/using-aws-s3-stream-wrapper-for-php/. Kontaktieren Sie mich, wenn Sie weitere Fragen haben. – EyalAr

Antwort

4

Da ich diese Frage vor etwa 5 Monaten gestellt habe, hatte ich etwas Zeit, ein paar Einsichten zu gewinnen; so werde ich es selbst beantworten:

Von dem, was ich gesehen habe, gibt es keinen wesentlichen Unterschied leistungsmäßig. Ich kann mir vorstellen, dass das Aufrufen von s3cmd aus PHP teuer sein kann, da für jede Anfrage ein externer Prozess aufgerufen wird; Aber dann wieder - Amazon SDK verwendet cURL, um seine Anfragen zu senden, so dass es keinen großen Unterschied gibt.

Ein Unterschied, den ich bemerkt habe, ist, dass cURL Ausnahmen Amazon SDK neigt (scheinbar zufällig und selten) zu werfen, aber s3cmd überhaupt nicht zum Absturz bringen. Meine Skripte laufen auf 10 von Tausenden von Dateien, so musste ich die harte Art lernen, mit diesen cURL-Ausnahmen umzugehen.
Meine Theorie ist, dass cURL abstürzt, wenn es einen Kommunikationskonflikt auf dem Server gibt (zum Beispiel, wenn zwei Prozesse versuchen, dieselbe Ressource zu verwenden). Ich arbeite an einem Entwicklungsserver, auf dem manchmal mehrere Prozesse gleichzeitig mit cURL auf S3 zugreifen; Dies sind die einzigen Situationen, in denen cURL dieses Verhalten aufweist.

Zum Schluss:
s3cmd verwendet, kann stabiler sein, aber das SDK ermöglicht mehr Flexibilität mit und eine bessere Integration mit PHP-Code; Solange Sie sich erinnern, die seltenen Fälle zu behandeln (ich würde 1 für alle 1000 Anfragen sagen, wenn mehrere Prozesse gleichzeitig laufen), in denen das SDK eine cURL-Ausnahme auslöst.

2

Da beide Methoden, s3cmd und SDK, den gleichen REST-Aufruf ausgeben, können Sie sicher wählen, welcher für Sie am besten geeignet ist.

Wenn Sie eine Datei verschieben, wenn das Ziel vorhanden ist, wird es immer ersetzt. Wenn Sie dieses Verhalten nicht möchten, müssen Sie überprüfen, ob der Name der Zieldatei bereits vorhanden ist oder ausgeführt werden soll nicht die Bewegungsoperation.

+0

Vielen Dank für Ihre Eingabe. – EyalAr