2 Bilder pro Datensatz in Datenbank oder Datei?
Kalle_B
- meinung
Hallöle,
habe pro Adresse ein Vorschaubild (für Listen) und ein größeres Bild (ca. 400 x 400 px) zu speichern.
Würde das gerne in der Datenbank machen, weil
Es können mehrere zehntausend Datensätze werden. Macht MySQL 5 dabei irgendein Problem? Z.B. Laufzeitverhalten, DB-Größe?
An was wäre in diesem Zusammenhang noch zu denken?
LG Kalle
An was wäre in diesem Zusammenhang noch zu denken?
Ggf. kannst du das Vorschaubild auch on-the-fly aus der Datenbank generieren (oder in einem Cache-Verzeichnis ablegen, wenn es noch nicht existiert), wenn das Geschwindigkeitsmäßig ok ist. Dann musst du das Bild nicht 2x speichern.
Ggf. kannst du das Vorschaubild auch on-the-fly aus der Datenbank generieren (oder in einem Cache-Verzeichnis ablegen, wenn es noch nicht existiert), wenn das Geschwindigkeitsmäßig ok ist. Dann musst du das Bild nicht 2x speichern.
Hmm, muss ich überlegen. Das "kleine" Bild könnte sinnvollerweise ein Ausschnitt aus dem großen sein, also nicht nur eine 1:1 Verkleinerung, die kann man oft nicht erkennen.
Aber wenn das kleine Bild fehlt, könnte ich es wohl erzeugen.
Wie heisst die PHP- Bibliothek dazu und wie kann ich abfragen, ob sie vorhanden ist?
Kalle
Hello,
Aber wenn das kleine Bild fehlt, könnte ich es wohl erzeugen.
Wie heisst die PHP- Bibliothek dazu und wie kann ich abfragen, ob sie vorhanden ist?
die gd-lib gehört inzwischen zu den PHP-Sourcen dazu.
mit der Fnktion gd_info()
http://de2.php.net/manual/de/function.gd-info.php
kannst Du einige Features erfragen.
Wenn DU eine Debian-Dtribution von PHP (5.2.6 ...) hast, wird die Funktion imagerotate() fehlen, was ich sehr bedaure.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
hi,
Es können mehrere zehntausend Datensätze werden. Macht MySQL 5 dabei irgendein Problem? Z.B. Laufzeitverhalten, DB-Größe?
Wenn bei einem Request ohnehin ein CGI-Prozess läuft, in dem ein Handle auf MySQL erstellt wird, also das Handle ohnehin schon vorhanden ist, ist das Auslesen eines Images ab diesem Zeitpunkt aus der DB performanter als dies mit einem CGI-Prozess aus dem Dateisystem zu lesen.
An was wäre in diesem Zusammenhang noch zu denken?
An die Übertragung und Speicherung der Images in der DB. Binärdateien können Zeichen enthalten, die Probleme machen. Nach meiner Erfahrung funktioniert das Übertragen von GIFs per HTTP und das Schreiben dieser in ein Blobfeld einwandfrei aber bei manchen JPGs ist das Bild kaputt. Wird alles MIME::Base64 kodiert, gibt es keine Probleme, jedoch ca 30% mehr Bits und Bytes.
Da Base64 nur ASCII enthält, kommt für die DB ein ganz normales Textfeld in Frage.
Hotte
Hi!
Wenn bei einem Request ohnehin ein CGI-Prozess läuft, in dem ein Handle auf MySQL erstellt wird, also das Handle ohnehin schon vorhanden ist, ist das Auslesen eines Images ab diesem Zeitpunkt aus der DB performanter als dies mit einem CGI-Prozess aus dem Dateisystem zu lesen.
Ein Request nach einem HTML-Dokument und der nach dem Bild sind zwei verschiedene, die sind also getrennt zu betrachten.
An was wäre in diesem Zusammenhang noch zu denken?
An die Übertragung und Speicherung der Images in der DB. Binärdateien können Zeichen enthalten, die Probleme machen.
Mit kontextgerechter Behandlung der Werte ist mit keinen Problem zu rechnen. Ein passender Feldtyp (BLOB) sollte auch verwendet werden.
Nach meiner Erfahrung funktioniert das Übertragen von GIFs per HTTP und das Schreiben dieser in ein Blobfeld einwandfrei aber bei manchen JPGs ist das Bild kaputt.
Dann hast du sehr wahrscheinlich die Erfahrung mit fehlerhaften Scripten gemacht.
Lo!
Hi!
Wenn bei einem Request ohnehin ein CGI-Prozess läuft, in dem ein Handle auf MySQL erstellt wird, also das Handle ohnehin schon vorhanden ist, ist das Auslesen eines Images ab diesem Zeitpunkt aus der DB performanter als dies mit einem CGI-Prozess aus dem Dateisystem zu lesen.
Ein Request nach einem HTML-Dokument und der nach dem Bild sind zwei verschiedene, die sind also getrennt zu betrachten.
Ja, macht es aus Performancegründen Sinn, das Bild in HTML einzubinden, also nicht vom Browser extra laden zu lassen (die Technik gibt es ja bei Mails, habe das auch schon für HTML getestet)?
Kalle
Hi,
Ja, macht es aus Performancegründen Sinn, das Bild in HTML einzubinden, also nicht vom Browser extra laden zu lassen (die Technik gibt es ja bei Mails, habe das auch schon für HTML getestet)?
Der IE kann das m.W. immer noch nicht interpretieren.
Ausserdem kann es nur in Ausnahmefällen sinnvoll sein.
Ein "normales" Bild kann mein Browser aus dem Cache holen, sobald es zum zweiten Mal angezeigt werden soll.
Direkt im HTML-Code untergebrachte Bilddaten müsste er hingegen mit jedem neuen HTML-Dokument auch wieder erneut mitladen - das ist also unter normalen Web-Bedingungen das absolute Gegenteil von performant.
MfG ChrisB
Moin!
Direkt im HTML-Code untergebrachte Bilddaten müsste er hingegen mit jedem neuen HTML-Dokument auch wieder erneut mitladen - das ist also unter normalen Web-Bedingungen das absolute Gegenteil von performant.
Abgesehen davon erhöht die für "data:"-Ressources notwendige Codierung (base64) die Datenmenge durchaus beträchtlich. Das will man eigentlich wirklich nur für sehr kleine Grafiken, deren Datenmenge im Verhältnis zum HTTP-Overhead, den man vermeiden kann, klein ist.
- Sven Rautenberg
Ausserdem kann es nur in Ausnahmefällen sinnvoll sein.
Ein "normales" Bild kann mein Browser aus dem Cache holen, sobald es zum zweiten Mal angezeigt werden soll.
Direkt im HTML-Code untergebrachte Bilddaten müsste er hingegen mit jedem neuen HTML-Dokument auch wieder erneut mitladen - das ist also unter normalen Web-Bedingungen das absolute Gegenteil von performant.
Nun ja, beim Hochladen und Anzeigen von Bildern bin ich eben verzweifelt. Das kleine Bild bekommt den Dateinamen ID_kl.jpg (ID steht für die Adress-ID). Egal, was ich hochgeladen habe, es wurde immer das erste Bild angezeigt.
Ich habe den Code hin und her geprüft, mit echo Kontrollen ausgegebn ...
Bis es bei mir "klick" machte und ich die Minuten und Sekunden angehängt habe: ID_kl.jpg?mi:ss Jetzt wird das aktuelle Bild geholt. An diesen verflixten Cache hatte ich nicht gedacht.
Kalle