Großer Text und Bilder in SQL

8

Ist es eine gute Idee, große Mengen an Text (zB HTML-Seiten) in Ihrer SQL-Datenbank zu speichern? Oder ist es eine bessere Idee, es als HTML-Dateien im Dateisystem zu speichern?

Das gleiche gilt für Bilder - ist es eine gute Idee, Bilddaten in der Datenbank zu speichern oder sie besser auf die Festplatte zu legen?

Führt das Speichern großer Datenmengen beispielsweise zu Leistungsproblemen? Was sind die Vor- und Nachteile der einzelnen Speichermethoden?

In Bezug auf die Größe der Daten, in diesem Fall suche ich in der Region von "ein paar Seiten" von HTML und Bilder von weniger als 500kb Größe (wahrscheinlich viel kleiner aber). Genug, um Ihre durchschnittliche Artikel / Blogeintrag / etc Skala Webseite zu produzieren.

    
Jonskichov 08.02.2009, 13:15
quelle

7 Antworten

7

Das Speichern von Binärdaten (Dokumente, Bilder usw.) in der Datenbank hat einige Vorteile.

  • Sie können die Aktualisierung des Dokuments selbst in derselben Transaktion festschreiben wie die Informationen (Name, Datum usw.), die Sie über das Dokument speichern möchten. Das bedeutet, dass Sie sich keine Gedanken über das Schreiben eines eigenen zweiphasigen Commits machen müssen (obwohl ISTR, dass SQL Server 2008 dafür eine Lösung bietet).

  • Sie können das gesamte Los (Dokumente und Metadaten) auf einmal sichern, ohne sich darum kümmern zu müssen, die Datenbank mit dem Dateisystem zu synchronisieren

  • Sie können Dokumente sehr einfach über .NET-Webservices bereitstellen, da sie direkt in DataTables gelangen und mühelos serialisiert werden, indem Sie die DataTables einfach in ein DataSet einfügen und übergeben.

  • Sie können die Datenbanksicherheit auf die Objekte anwenden, genauso wie auf den Rest Ihrer Daten, und müssen sich nicht um Netzwerkdateiberechtigungen kümmern.

Es hat auch einige Nachteile:

  • Sicherungen können sehr groß werden

  • Die Größe des binären Objekts in der Datenbank kann ein wenig größer sein als die Datei, aus der es ursprünglich stammt, und daher kann es in einer Client-Server-Umgebung die Zeit für das Öffnen über das Netzwerk erhöhen .

  • Je nach Anwendung müssen Sie möglicherweise die Last auf dem Datenbankserver berücksichtigen, wenn viele große Dokumente bereitgestellt werden müssen.

Alles, was gesagt wurde, ist eine Technik, die ich ausgiebig benutze, und es funktioniert sehr gut.

    
ChrisA 08.02.2009, 13:43
quelle
2

Je mehr du eingibst, desto mehr bewegst du dich, desto mehr Overhead wirst du erzeugen.

Wenn Sie einen großartigen Webserver haben, ist es sinnlos, die ganze zusätzliche Belastung der Datenbank ohne Grund hinzuzufügen, wenn Sie all diese Belastung an den Webserver delegieren können.

Selbst aus Sicht der Wartung ist es viel einfacher, sich mit den Dateien in einer netten logischen Struktur zu bewegen und zu arbeiten, anstatt ständig mit der Datenbank zu arbeiten.

    
Kyle G 08.02.2009 13:23
quelle
1

Es ist eine Frage der Größe. Es hängt davon ab, wie groß deine Bilder / Texte wirklich sind.

Das Speichern dieser Werte in einer DB hat viele Vorteile gegenüber einem dateibasierten Ansatz, wird aber an einem bestimmten Punkt ineffizient. Zum Beispiel würde ich keine extrem hochauflösenden Bilder in einer DB speichern.

Es ist also eine Frage des Abschlusses, und das bedeutet wiederum, dass die Antwort von Ihren HW-Ressourcen und der Systemarchitektur abhängt. Ich glaube also nicht, dass es eine richtige Antwort auf deine Frage gibt. Vielleicht könnten Sie uns mehr über die Einzelheiten dessen, was Sie speichern möchten und wie Ihre Server aussehen, erzählen.

    
Assaf Lavie 08.02.2009 13:28
quelle
1

Ich denke, dass Sie beide Seiten argumentieren könnten, aber ich komme auf der Seite einer großen Menge von Text ist OK (und wird somit durchsuchbar), aber Bilder sollten als separate Dateien mit Links in der Datenbank gespeichert werden. Ich habe nie einen zwingenden Grund gefunden, Bilder in der Datenbank zu speichern, auch wenn es möglich ist.

    
E.J. Brennan 08.02.2009 13:34
quelle
1

Es ist noch etwas zu beachten, wie oft sich diese großen Text- und Bildteile verändern. Änderungen an Daten sind die Ursache für die Fragmentierung. Fragmentierung kann sowohl in Ihren Datendateien als auch in Ihrer Datenbankstruktur auftreten. Ein Dateisystem ist viel besser geeignet, die Fragmentierung zu handhaben als eine Datenbank. Je öfter sich eine Datei ändert, desto schneller wird das System fragmentieren.

    
nabrond 09.02.2009 12:42
quelle
1

Speichern Sie den Text in der Datenbank

Ja, Sie sollten so viel HTML-Inhalt wie möglich in der Datenbank speichern = & gt; Es vereinfacht das Backup. Sie sollten wahrscheinlich ein Vorlagensystem verwenden, damit Sie nicht die gesamte Webseitenstruktur mit jedem Dokument speichern. Speichern Sie einfach den Inhalt, der von einer Seite zur nächsten variiert, in die Datenbank.

In der Praxis überschreiten die meisten Websites, die wir implementiert haben, nicht mehr als 10 MB an Textinhalten (wir verwenden unser eigenes benutzerdefiniertes Vorlagensystem). 10 MB reiner Text ist eine Menge Inhalt (glaube es oder nicht)

Speichern Sie Bilder im Dateisystem

Im Allgemeinen ist es eine schlechte Idee, Bilder in der Datenbank zu speichern, weil Sie die Fähigkeit verlieren, Fotos schnell mit FTP auszutauschen.

Die Wartung wird auch auf diese Weise einfacher. Logos, Artikelfotos und unterstützende Grafiken verändern sich im Laufe einer Website erheblich. Im Gegensatz zu Text können Sie die Binärdaten von Fotos nicht genau in einen Datenbankeditor einfügen.

Auch wenn Ihre Datenbank beschädigt wird - was meistens passiert, haben Sie Probleme, wenn Sie Bilder in der Datenbank speichern. Während Dateisystembeschädigungen nur eine begrenzte Anzahl von Dateien betreffen. Bei einer Beschädigung der Datenbank werden Sie eine Sicherungskopie abrufen, und das ist ein Zeitluchs.

    
John 07.07.2011 08:07
quelle
0

Es war eines meiner Dilemmas, als ich PHP programmiert habe. Das Speichern von Bildern wie Blobs in der Datenbank kann die Verwaltung von Sicherheit und Berechtigungen vereinfachen, ist jedoch kostspielig. Ich habe immer einige Metadaten auf der Datenbank und die binären Inhalte auf dem Dateisystem gespeichert. Der Zugriff auf Bilder war nicht direkt ( <img src="image/path" /> ), wurde aber von PHP-Skripten zur Verfügung gestellt, die die Benutzerauthentifizierung und -berechtigungen durch Sitzungen überprüft haben, bevor das Bild angezeigt wurde ( <img src="showimage.php?id=$id" /> ). Ich empfehle Ihnen, dies zu tun (für welche Art von Anwendung Sie auch arbeiten).

    
tunnuz 08.02.2009 13:36
quelle

Tags und Links