Bilder in der Datenbank oder in Dateien mit einer Datenbankverknüpfung speichern?

22

Ist es angebracht, die Bilddateien in der Datenbank zu speichern? Oder ist es besser, nur den Pfad der Datei in der Datenbank zu speichern, während die Datei selbst auf dem Server bleibt?

Gibt es andere Methoden, um dies richtig zu machen?

LostMohican
quelle

Antworten:

22

Es wird dringend empfohlen, die Bilder im Dateisystem und nicht in der Datenbank zu speichern.

Das Speichern von Bildern in der Datenbank hat mehrere Nachteile:

  • Die Datenbank kann unerwartet groß werden. Manchmal ist Platz ein Problem. Zum Beispiel haben Sie mit SQL Server Express ein Limit von 4 GB.

  • Datenmigrationen können zum Problem werden, wenn Sie beispielsweise von SQL Server zu Oracle wechseln

  • Abfragen können sehr langsam werden und Sie haben eine hohe Datenbanklast

  • Die Interoperabilität mit anderen Anwendungen ist besser, wenn sich die Bilder im Dateisystem befinden und andere Anwendungen eine andere Datenbank verwenden. Sie können auch direkt darauf zugreifen und benötigen keine Datenbanktools.

  • Schlechtere Leistung im Allgemeinen

  • Sie müssen wahrscheinlich trotzdem temporäre Dateien erstellen, wenn Sie die Bilder aus der Datenbank abrufen. Das ist unnötig

Diese Nachteile überwiegen bei weitem die Kosten für die Synchronisierung der Pfade zu den in der Datenbank gespeicherten Bildern mit dem Dateisystem. Es gibt nur wenige Sonderfälle, in denen es besser ist, die Bilder in der Datenbank zu speichern.

Falke
quelle
11

Nachforschungen zu SQL Server 2005 und dem NTFS-Dateisystem (Microsoft) zum Vergleich der CRUD-Leistung: Zu BLOB oder nicht zu BLOB . Diese Studie wurde auch in einer Webanwendung durchgeführt. Sie haben eine andere Datenbank (MySQL) aufgelistet und ich gehe davon aus, dass Sie Windows Server nicht für Ihre PHP-Site verwenden. Es wäre also interessant, wenn jemand eine ähnliche Studie zu verschiedenen Technologien durchgeführt hätte.

Es stellt sich heraus, dass dies von der Größe der Dateien abhängt. SQL Server bevorzugt (2x bessere) Blobs von 256 KB oder weniger und das Dateisystem bevorzugt Dateien von 1 MB +. Dateisysteme in dieser Studie verarbeiten Fragmentierungen besser als die Datenbank. Wenn Sie diese Dateien also ständig aktualisieren oder das System mit der Zeit wächst, wird die Fragmentierung ein größerer Faktor sein, der vom Dateisystem besser unterstützt wird.

Sie müssen bestimmen, wie Ihre Site für die Pflege dieser Dateien verantwortlich ist. Wenn Sie eine Website für Versicherungsagenten erstellen, auf der Sie Fotos von einem Unfall hochladen können, sollten Sie die Transaktionskontrolle besser nutzen und sicherstellen, dass sich diese Dateien auf dem Server befinden. Gute Datenbanken erledigen dies für Sie, sodass Sie als Entwickler zusätzlichen Druck ausüben.

Replikation, Sicherung, Notfallwiederherstellung, Fragmentierung, verbleibende Festplattenkapazität und Leistung im Zeitverlauf sollten während des Entwurfs berücksichtigt werden. Dies ist nur eine Studie zur Vorgängerversion von SQL Server, und wie bei anderen Datenbankherstellern ist der Umgang mit großen Dateien und Binärdateien ein wichtiger Wettbewerbsfaktor.

JeffO
quelle
Möglicherweise möchten Sie auch integrierte Lösungen in Betracht ziehen. In SQL Server gibt es beispielsweise FILESTREAM und Remote Blob Store .
Fernando Correia
4

Wenn Sie eine große Anzahl von Bildern haben, kann das Speichern dieser Bilder in einer Datenbank Probleme mit dem Auslaufen der Inodes auf Dateisystemebene beseitigen.

Dieses Problem lässt sich jedoch am besten lösen, indem ein geeigneteres Dateisystem verwendet wird und alle Maßnahmen, die für dieses Dateisystem in Bezug auf die Organisation empfohlen werden.

Andernfalls ist das Speichern von Bildern in einer Datenbank eine völlige Verschwendung von Ressourcen. Speichern Sie den Pfad wie Sie sagten.

Jonno
quelle