Performancefrage
SteBu
- php
Moin,
auch wenn sich meine Frage durch mehr oder weniger umfangreiche Tests selbst beantworten würde, möchte ich doch mal hier fragen. Evtl. gibt es ja schon Erfahrungswerte.
Situation.
Es werden relative große JPG-Files per Upload auf den Server geschaufelt. Dabei werden Vorschaubilder in 2 Größen erstellt.
Beim Aufrufen der Bilder sollen u.a. die EXIF-Daten mit angezeigt werden.
Was ist performanter?
1. Beim Upload die EXIF-Daten lesen(read_exif_data()) und mit in der DB vermerken und damit beim Betrachten der Bilder diese Infos aus der DB zu lesen
oder
2. Die EXIF-Daten beim Betrachten der Bilder jedesmal neu(vom JPG-File) zu lesen.
Da sich die EXIF-Daten ja nicht ändern, würde ich ja Vers. 1 den Vorzug geben.
Gerne auch andere Meinungen zum Thema.
Gruß aus Berlin
SteBu
echo $begrüßung;
Was ist performanter?
- Beim Upload die EXIF-Daten lesen(read_exif_data()) und mit in der DB vermerken und damit beim Betrachten der Bilder diese Infos aus der DB zu lesen
oder- Die EXIF-Daten beim Betrachten der Bilder jedesmal neu(vom JPG-File) zu lesen.
Rhetorische Gegenfragen: Hast du eine langsame oder eine schnelle Datenbankanbindung? Hast du ein langsames oder ein schnelles Dateisystem? Kannst du garantieren, dass zwei gleiche Abfragen immer genau gleich lang sind oder schlägt nicht gelegentlich ein Cache-Mechanismus zu und gelegentlich nicht?
Ich glaube nicht, dass man als Außenstehender deine Frage ohne zu spekulieren beantworten kann.
echo "$verabschiedung $name";
Moin,
läuft auf einem normalen Shardhostingangebot(Hosteurope).
Ich glaube nicht, dass man als Außenstehender deine Frage ohne zu spekulieren beantworten kann.
Für den Anfang nehme ich auch spekulative Aussagen ;-)
Gruß
SteBu
n'abend,
Für den Anfang nehme ich auch spekulative Aussagen ;-)
<spekuliere>
wenn du sowieso auf die DB zugreifen musst, weil du beispielsweise die Dateinamen der Bilder dort drin gespeichert hast, dann ist es naheliegend in der tabelle einfach eine neue spalte mit deinen daten anzulegen.
</spekuliere>
weiterhin schönen abend...
<Vorschlag>
Wie wäre es, wenn du es ausprobierst und einfach mal "mitstoppst", wie lang die beiden aktionen brauchen?
</Vorschlag>
Hello,
wenn du sowieso auf die DB zugreifen musst, [...]
Sehe ich auch so.
Schließlich muss der Server in diesem Fall überhaupt nicht auf die Bild-ressourcen zugreifen, es sei denn, dass sie noch skaliert werden müssten...
Man erspart dem Server also i.d.R. diverse Dateizugriffe und viele Speicherallokationen.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hello,
Was ist performanter?
- Beim Upload die EXIF-Daten lesen(read_exif_data()) und mit in der DB vermerken und damit beim Betrachten der Bilder diese Infos aus der DB zu lesen
oder- Die EXIF-Daten beim Betrachten der Bilder jedesmal neu(vom JPG-File) zu lesen.
Auch von mir einige Gegenfragen:
Was müsste das Script lesen lassen, wenn man die EXIF-Informationen bei der Anzeige aus dem Bild extrahieren wollte?
Wer muss denn das Bild sonst lesen? Client oder Server?
Liegen die Bild-Bezeichner und deren Pfade so vor, dass sie mit _einem_ _einzigen_ Query gemeinsam mit den Metadaten aus der DB geholt werden können?
Müssen die Bildbezeichner und -Pfade sowieso aus der DB geholt werden?
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Moin,
erstmal Danke an alle die geantwortet haben. Ich fasse hier mal kurz zusammen.
Was müsste das Script lesen lassen, wenn man die EXIF-Informationen bei der Anzeige aus dem Bild extrahieren wollte?
Hier verstehe ich Deine Frage nicht.
read_exif_data('bild.jpg') gibt ein Array zurück. Aus diesem würde ich die für mich wichtigen Infos holen.
Wer muss denn das Bild sonst lesen? Client oder Server?
Das Bild(Original) zu dem Zeitpunkt niemand. Es soll nur ein Thumb zum Client geschickt werden.
Liegen die Bild-Bezeichner und deren Pfade so vor, dass sie mit _einem_ _einzigen_ Query gemeinsam mit den Metadaten aus der DB geholt werden können?
Ja.
Müssen die Bildbezeichner und -Pfade sowieso aus der DB geholt werden?
Ja.
Gruß
SteBu
Hello,
Was müsste das Script lesen lassen, wenn man die EXIF-Informationen bei der Anzeige aus dem Bild extrahieren wollte?
Hier verstehe ich Deine Frage nicht.
read_exif_data('bild.jpg') gibt ein Array zurück. Aus diesem würde ich die für mich wichtigen Infos holen.
Hier muss ein Kanal zur Datei verwendet werden, und nun besteht die Frage, ob das ganze Bild eingelesen wird, oder nur einige Bytes an einer bestimmten Dateiposition.
Wer muss denn das Bild sonst lesen? Client oder Server?
Das Bild(Original) zu dem Zeitpunkt niemand. Es soll nur ein Thumb zum Client geschickt werden.
Glaub ich nicht.
Ich glaube eher, dass ein Thumb abgerufen wird vom Client.
Und dann muss der Server doch sowieso das Bild anfassen, um einen Thumb zu bauen, oder?
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Moin,
Hier muss ein Kanal zur Datei verwendet werden, und nun besteht die Frage, ob das ganze Bild eingelesen wird, oder nur einige Bytes an einer bestimmten Dateiposition.
Gute Frage. Wenn ich es in der Doku richtig verstanden habe, wird nur der EXIF-Header gelesen, also muß das komplette Bild nicht in den Speicher.
Das Bild(Original) zu dem Zeitpunkt niemand. Es soll nur ein Thumb zum Client geschickt werden.
Glaub ich nicht.
Ich glaube eher, dass ein Thumb abgerufen wird vom Client.
Wortklauberei ;-). Aber Recht hast Du.
Und dann muss der Server doch sowieso das Bild anfassen, um einen Thumb zu bauen, oder?
Nein. Die 2 Versionen der Thumbs werden schon beim hochladen erzeugt und gammeln dann im Dateisystem rum.
Gruß
SteBu
Hello,
[...]
Dann halte ich die Version mit der DB auf jeden Fall für schneller und lastärmer. Du müsstest nur dafür sorgen, dass nicht jedes Bild einen eigenen Request erzeugt auf die DB, sondern eben die Seite den Request erzeugt und alle Ressource-Bezeichner und Metainformationen in _einem_ _einzigen_ Request besorgt werden. Dann hast Du die Last minimiert.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Moin Tom,
Dann halte ich die Version mit der DB auf jeden Fall für schneller und lastärmer.
Das dachte ich mir auch so.
Du müsstest nur dafür sorgen, dass nicht jedes Bild einen eigenen Request erzeugt auf die DB,
Das ist klar.
Danke für Deine Antworten/Fragen
Moi moin,
- Beim Upload die EXIF-Daten lesen(read_exif_data()) und mit in der DB vermerken und damit beim Betrachten der Bilder diese Infos aus der DB zu lesen
oder- Die EXIF-Daten beim Betrachten der Bilder jedesmal neu(vom JPG-File) zu lesen.
zwischen den Alternativen gestellt, würde ich zu zweitens neigen. Allerdings nicht aus Sicht auf die Performanz sondern aus Gründen der Verfügbarkeit. Leider ist vereinzelt immer wieder zu beobachten, daß man auf Webpresenzen eine Fehlermeldung erhält, weil die DB nicht zu erreichen ist. Das zweiter Verfahren würde in jedem Fall funktionieren.
Gruß aus Berlin!
eddi