|
|
 |
16.3. Ist es sinnvoll, Bilder in einer Datenbank abzulegen?
Aus irgendeinem Grund scheinen viele Leute zu glauben, dass es
Bilddaten adeln würde, wenn man sie in eine Datenbank stopft.
Wenn man die Bilddaten selbst in der Datenbank ablegt, hat dies
den Vorteil, dass keine broken links auftreten können, weil
ja die Bilder selbst genauso wie die Links auf die Bilder aus
der Datenbank erzeugt werden. Liegen die Bilddaten dagegen im
Dateisystem und die Datenbank enthält nur Pfadnamen, dann ist es
problemlos möglich, dass jemand die Dateien umbenennt, ohne diese
Änderung in der Datenbank nachzuführen und umgekehrt. Leider ist
es speziell bei MySQL so, dass keinerlei Mechanismen vorhanden
sind, die die referentielle Integrität der Datenbank
sicherstellen, sodass diese Sicherheit nicht wirklich gegeben
ist.
Dazu kommen noch eine Reihe von weiteren Nachteilen:
-
Wenn man die Bilddaten selbst in der Datenbank speichert, dann
muss man für jedes Bild in einer Webseite ein Script starten.
Das bedeutet, für eine Seite wie
index.php:
<html>
<body>
<h1>Bla</h1>
<img src="sendimage.php?img=geniales_logo.gif" />
</body>
</html>
muss nicht nur das Script index.php gestartet werden, um
das HTML zu generieren, sondern für jedem Image-Tag auf der
Seite muss ein Script sendimage.php gestartet werden, das
eine Datenbankverbindung aufmacht und das Bild aus der Datenbank
fischt. Wenn CGI PHP verwendet wird, ist der Overhead noch viel
größer, denn hier muss für jedes Bild ein 800 kB großer
PHP-Prozess erzeugt und gestartet werden.
Legt man dagegen die Bilder als Dateien im Dateisystem ab, kann
man mit der Static Page Engine des Webservers oder gar einem
spezialisierten Bilder-Webserver arbeiten und ist um ca. den
Faktor 10 effizienter.
-
MySQL kann BLOBs (binary large objects) nicht
fragmentarisch bearbeiten, d.h. es ist nicht möglich, ein BLOB
in kleinen Teilstücken aus der Datenbank zu holen oder den
hinteren Teil eines BLOBs zu holen, ohne die Bytes davor zu
lesen. Obendrein ist der Sendepuffer von MySQL für BLOBs
begrenzt groß, sodass nicht beliebig große BLOBs in der Datenbank
abgelegt werden können.
-
Viele Datenbanken werden sehr ineffizient, wenn
vergleichsweise große BLOBs zusammen mit anderen, sehr kleinen
Objekten in derselben Tabelle gespeichert werden oder wenn eine
Tabellenzeile mehr als ein BLOB enthält.
Wie man Bilder in einer MySQL-Datenbank speichert, wird im Artikel
Wie kann ich Bilder in einer MySQL-Datenbank speichern? beschrieben.
|