Verschieben von 1 Million Bilddateien zu Amazon S3

8

Ich betreibe eine Bild-Sharing-Website mit über 1 Million Bildern (~ 150 GB). Ich speichere diese Daten derzeit auf einer Festplatte in meinem dedizierten Server, aber mir geht schnell der Speicherplatz aus. Daher möchte ich sie auf Amazon S3 verschieben.

Ich habe versucht, eine RSYNC zu machen, und es dauerte RSYNC über einen Tag, nur um die Liste der Bilddateien zu scannen und zu erstellen. Nach einem weiteren Übertragungstag waren es nur noch 7% und ich hatte meinen Server auf einen Crawl verlangsamt, also musste ich abbrechen.

Gibt es eine bessere Möglichkeit, dies zu tun, z. B. GZIP auf eine andere lokale Festplatte und dann die einzige Datei übertragen / entpacken?

Ich frage mich auch, ob es sinnvoll ist, diese Dateien in mehreren Unterverzeichnissen zu speichern, oder ist es in Ordnung, alle Millionen + Dateien im selben Verzeichnis zu haben?

    
makeee 17.01.2011, 02:26
quelle

3 Antworten

5
  1. Da die Dateien (noch) nicht in S3 vorhanden sind, sollte das Senden als Archivdatei schneller sein als die Verwendung eines Synchronisationsprotokolls.

  2. Das Komprimieren des Archivs wird jedoch (wenn überhaupt) nicht viel für Bilddateien tun, vorausgesetzt, die Bilddateien sind bereits in einem komprimierten Format wie JPEG gespeichert.

  3. Die Übertragung von ~ 150 Gbytes an Daten wird für eine lange Zeit viel Netzwerkbandbreite beanspruchen. Dies ist dasselbe, wenn Sie versuchen, HTTP oder FTP anstelle von RSYNC zu verwenden, um die Übertragung durchzuführen. Eine Offline-Übertragung wäre besser, wenn möglich. z.B. Senden einer Festplatte oder einer Reihe von Bändern oder DVDs.

  4. Eine Million Dateien in einem flachen Verzeichnis zu speichern, ist aus Performance-Sicht eine schlechte Idee. während einige Dateisysteme dies recht gut mit O(logN) Dateinamen nachschlagen, andere nicht mit O(N) filename lookup. Multiplizieren Sie das mit N , um auf alle Dateien in einem Verzeichnis zuzugreifen. Ein zusätzliches Problem besteht darin, dass Dienstprogramme, die auf Dateien in der Reihenfolge von Dateinamen zugreifen müssen, erheblich langsamer werden können, wenn sie eine Million Dateinamen sortieren müssen. (Dies könnte teilweise erklären, warum rsync 1 Tag benötigte, um die Indizierung durchzuführen.)

  5. Alle Ihre Bilddateien in ein Verzeichnis zu stellen, ist aus Managementsicht eine schlechte Idee. z.B. um Backups zu erstellen, Dinge zu archivieren, Dinge zu verschieben, auf mehrere Discs oder Dateisysteme zu erweitern, usw.

Stephen C 17.01.2011, 02:52
quelle
25

Eine Option könnte darin bestehen, die Migration auf faule Weise durchzuführen.

  • Alle neuen Bilder gehen zu Amazon S3.
  • Alle Anfragen für Bilder, die noch nicht auf Amazon sind, lösen eine Migration dieses einen Bildes auf Amazon S3 aus. (stell es in die Warteschlange)

Dies sollte ziemlich schnell alle neueren oder häufig abgerufenen Bilder zu Amazon übertragen und somit die Belastung Ihres Servers reduzieren. Sie können dann eine weitere Aufgabe hinzufügen, die die anderen migriert, wenn der Server am wenigsten ausgelastet ist.

    
Ian Mercer 17.01.2011 03:18
quelle
4

Eine Option, die Sie verwenden könnten, anstatt die Dateien über das Netzwerk zu übertragen, besteht darin, sie auf eine Festplatte zu legen und sie an Amazon zu importieren / exportieren Service. Sie müssen sich nicht darum kümmern, die Netzwerkverbindung Ihres Servers zu sättigen usw.

    
GWW 17.01.2011 02:30
quelle

Tags und Links