Frage von ivan1410, 81

Wie speichere ich die Fotos am effizientisten?

Hallo Zussamen

Habe gerade ein Projekt und zwar mache ich ein Social Network. Es ist mir klas dass ich damit kein Erfolg haben werde, will ich aber auch gar nicht. Es ist einfach für mich dass ich das geschafft habe. Meine Frage nun. Wenn Nutzer ihr Foto hochladen, wie soll dass gespeichert werden, damit es nicht zuviel Speicherplatz verbraucht und allgemein dass es gut ist. Wie mscht das z.b. Instagram oder Facebook?

Vielen Dank

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von TeeTier, 29

Wie das Foto gespeichert wird, wenn es erst einmal hoch geladen ist, ist eigentlich zweitrangig.

Es gibt aber 2 Tricks, die dir wirklich sehr viel Bandbreite sparen werden:

a) Passe die Response-Header so an, dass du ein maximales Caching erzielst. Alleine damit kannst du bewirken, dass das Foto EINMAL herunter geladen, und dann für eine beliebige Zeit im Browsercache verbleibt. Werden danach weitere Seiten mit diesem Foto geladen, macht dein Browser noch nicht einmal eine "If-Modified-Since" Anfrage ... da passiert GAR nichts! Wenn man das mit Skripten, CSS und anderen Ressourcen ebenso macht, kannst du die Zahl der Requests pro Server alleine dadurch verhundertfachen. Sei dir aber darüber im Klaren, dass du all die nötigen Einstellungen nicht mit der htaccess hinbekommen wirst. Für ein Optimum musst du Header per Hand schicken!

b) Falls dir der vorige Punkt mit den Headern zu viel ist, dann deaktiviere wenigstens die komprimierte Übertragung für Bilddateien. Die sind nämlich schon immer so gut komprimiert, dass jede weitere GZip- oder Bzip2-Hülle erstens Rechenleistung verbrät, und zweitens die zu übertragenden Daten aufplustert. In beiden Fällen ist das zwar nicht sooo viel, aber ein Nachteil ergibt sich dadurch immer! :)

Wenn du vor allem den ersten Punkt beachtest, kannst du deine Bilder auch als unkomprimierte BMPs mit "Content-Encoding: identity" verschicken, die eine Größe von mehreren Megabyte haben, und du wirst DENNNOCH weniger Bandbreite verbrauchen, da kein Browser nach dem ersten Request noch weitere zukünftige Requests machen wird! Null. Nichts! (Wie gesagt, nicht mal "If-Modified-Since" oder ähnliches, auf das man dann mit 304 antworten muss ... sogar das fällt weg. Dein Server wird überhaupt nicht mehr belästigt. Nicht mit einem einzigen Byte!)

Toller Trick, oder? Macht interessanterweise kaum eine Website so. :)

Ansonsten solltest du Fotos natürlich als JPG speichern, und zwar nicht allzu stark komprimiert.

Viel Spaß damit! ;)

Kommentar von ivan1410 ,

Vielen Dank

Antwort
von musikuss78, 47

Instagram und Facebook nehmen so genannte CDNs (»Content Delivery Network«), um Bandbreite und Speicherplatz zu sparen und Performance zu steigern. Beide haben ihre eigenen Server dafür. Außerdem verarbeiten beide noch die Bilder - also Größe und Komprimierung für unterschiedliche Bildschirmauflösungen.

Das bekannteste für Dich nutzbare CDN wäre Amazon Cloudfront: https://aws.amazon.com/de/cloudfront/

Kommentar von ivan1410 ,

Vielen Dank

Antwort
von alexbeckphoto, 36

Wie mscht das z.b. Instagram oder Facebook?

Diese Firmen betreiben jeweils mehrere riesige Hallen mit mehreren hundert Metern Länge und Breite die über die ganze Welt verstreut liegen und bis unter die Decke voll sind mit Servern und angeschlossenen Datenspeichern (Festplatten)

siehe z.B. hier:

https://www.colocationamerica.com/picts/blog/Facebook-data-center-rutherford.jpg

Kommentar von alexbeckphoto ,

PS:

"zuviel Speicherplatz"

was heisst für dich "zu viel Speicherplatz"? Auf eine handelsübliche 4TB Festplatte die du im Handel für netto 100€ kaufen kannst passen in typischer "Social-Media-Größe" etwa 20 Millionen Bilder

Kommentar von ivan1410 ,

Vielen Dank

Antwort
von userfromberlin, 18

Also ich komprimiere meine Bilder immer mit PHP GD. http://php.net/manual/de/book.image.php

Antwort
von GanMar, 39

Facebook und Instagramm werden sich wohl kaum Gedanken um Speicherplatz machen müssen. Einige zig Terabyte Festplattenplatz ist das billigste am ganzen Unternehmen.

Du könntest eine Maximalgröße vorgeben, beispielsweise längste Seite maximal 1500 px. Was dann größer ist, wird nach dem Upload auf dem Server skaliert, bevor es gespeichert wird. Zudem kannst Du überlegen, ob Du nur jpg zulassen möchtest.

Antwort
von procoder42, 28

Wenn man sich mal den Link von einem Foto anschaut, könnte man folgende Schritte herauslesen :

1. Bild hochladen 

2. Vom Computer einen Bezeichner generieren lassen (ne lange Zeichenkette; Wahrscheinlichkeit für eine Kollision geht gegen null)

3. Bild unter dem Bezeichner abspeichern

4. In der Datenbank eine Liste mit allen Foto Links des Nutzers abspeichern

Keine passende Antwort gefunden?

Fragen Sie die Community