ASP.NET: Bilder in die Datenbank oder ins Dateisystem?
Gerade eben kocht in der ASP.NET-Newsgroup die Frage eines ASP.NET-Novizen hoch, ob Bilder besser in die Datenbank oder ins Dateisystem gehören. Er selbst speichert sie in der Datenbank, denn die Vorteile sind aus seiner Sicht bestechend:
- Zusammenhang zwischen Bildern und Daten
- Kein externes Rumliegen der Bilder (Datensicherung, Konsistenz)
- Datenbank kann die Bilder als BLOBs verwalten
- Die Applikation kann über ihre Logik Zugriffsbeschränkungen und Bildmanipulationen zur Laufzeit implementieren
Generell stimmen diese Vorteile auch, aber man erkauft sie sich mit einigen Nachteilen, die man zumindest kennen sollte:
- Jedes Bild muss extra aus der Datenbank abgerufen werden (ADO.NET oder NHibernate oder was auch immer)
- Der Abruf der Bilder läuft stets über die .NET-Applikation
- Der Webserver kann physisch im Dateisystem liegende Bilder performanter abrufen, als dies die .NET-Applikation schaffen könnte
- Ggf. kann auf Ebene des Webservers ein Caching der Bilder stattfinden
- Die Bilder können u.U. per FTP verwaltet oder geändert werden
Aus Performance-Erwägungen sollten Bilder deshalb nicht in der Datenbank gespeichert werden, denn die Speicherung der Bilder in der Datenbank kann für genau die fünf Prozent Last sorgen, die die Applikation subjektiv nicht mehr reagieren ließe, somit also das Fass zum Überlaufen bringen könnte.
Bei privaten, semiprofessionellen oder allgemeiner nicht mit Höchstlast und höchsten Skalierungsanforderungen gestraften Applikationen ist es aber völlig okay, die Bilder in der Datenbank zu halten. Da spricht – wenn man Vor- und Nachteile gegeneinander abwägt – nix dagegen.
Wer übrigens wissen möchte, wie man Bilder in der Datenbank speichert, ausliest und anzeigt, findet bei MSDN Solve einen passenden Artikel.
