Im Allgemeinen, wie schlimm eines Leistungseinbruchs ist das Speichern einer Datei in einer Datenbank (speziell mssql) im Gegensatz zum Dateisystem? Ich kann keinen Grund außerhalb der Anwendbarkeit der Anwendung finden, dass ich meine Dateien als Varbararies in SQL Server speichern möchte.Speichern einer Datei in einer Datenbank im Gegensatz zum Dateisystem?
Antwort
Werfen Sie einen Blick auf diese Antwort:
Storing Images in DB - Yea or Nay?
Im Wesentlichen kann der Raum und Performance-Einbußen ziemlich groß sein, abhängig von der Anzahl der Benutzer. Bedenken Sie auch, dass Web-Server billig sind und Sie einfach mehr hinzufügen können, um die Last auszugleichen, während die Datenbank normalerweise der teuerste und am schwierigsten zu skalierende Teil einer Web-Architektur ist.
Es gibt einige gegensätzliche Beispiele (z. B. Microsoft Sharepoint), aber normalerweise ist das Speichern von Dateien in der Datenbank keine gute Idee.
Es sei denn, Sie schreiben Desktop-Apps und/oder ungefähr wissen, wie viele Benutzer Sie jemals haben, aber auf etwas so zufällig und unerwartet wie eine öffentliche Website, können Sie einen hohen Preis für die Speicherung von Dateien in der Datenbank bezahlen.
In meiner eigenen Erfahrung ist es immer besser, Dateien als Dateien zu speichern. Der Grund ist, dass das Dateisystem für den Dateispeicher optimiert ist, während dies bei einer Datenbank nicht der Fall ist. Natürlich gibt es einige Ausnahmen (z. B. das viel gepriesene MS-Dateisystem der nächsten Generation soll auf dem SQL-Server gebaut werden), aber im Allgemeinen ist das meine Regel.
Was ist die Frage hier?
Moderne DBMS SQL2008 haben eine Vielzahl von Möglichkeiten zum Umgang mit BLOBs, die nicht nur in einer Tabelle stecken. Es gibt natürlich Vor- und Nachteile, und Sie müssen vielleicht ein wenig tiefer darüber nachdenken.
Dies ist ein interessantes Papier, vom Ende (?) Jim Gray
To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem
ich mit @ZombieSheep zustimmen. Nur noch eine Sache - Ich glaube im Allgemeinen nicht, dass Datenbanken tatsächlich portabel sein müssen, weil Sie alle Funktionen Ihres DBMS-Anbieters vermissen. Ich denke, dass die Migration zu einer anderen Datenbank das letzte wäre, was man in Betracht ziehen würde. Nur mein $ .02
Der Overhead von einem Blob (Bild) in ein Byte-Array zu analysieren und dann auf die Festplatte im richtigen Dateinamen zu schreiben und dann zu lesen ist genug von einem Overhead-Hit, um Sie davon abzuhalten dies zu oft, besonders wenn die Dateien ziemlich groß sind.
Wenn Sie zu SQL Server 2008 wechseln können, können Sie die FILESTREAM-Unterstützung nutzen, die Ihnen das Beste bietet - die Dateien werden im Dateisystem gespeichert, aber die Datenbankintegration ist viel besser als nur das Speichern eines Dateipfads ein Varchar-Feld. Ihre Abfrage kann einen Standard-.NET-Datenstrom zurückgeben, was die Integration sehr vereinfacht.
Ich habe hier einige Vorbehalte. Insbesondere die Skalierbarkeit und Verfügbarkeit der Dinge: Wie kontrollieren Sie, wo diese "Blobs" gespeichert sind? –
Skalierbarkeit und Verfügbarkeit scheinen ziemlich gut durchdacht zu haben - dieses White Paper finden Sie unter: http://msdn.microsoft.com/en-us/library/cc949109.aspx –
Ein Nachteil dabei ist, dass Sie die integrierte Sicherheit verwenden (dh Windows-Authentifizierung) beim Herstellen einer Verbindung zur Datenbank: http://blogs.msdn.com/b/psssql/archive/2008/04/10/how-it-works-file-streams-requires-integrated-security-windows- authentication.aspx –
Wir haben die Entscheidung als varbinary Ausgaben für http://www.freshlogicstudios.com/Products/Folders/ halb erwartete Leistung zu speichern. Ich kann sagen, dass wir angenehm überrascht waren, wie gut es funktioniert hat.
Ich würde sagen, es hängt von Ihrer Situation ab. Zum Beispiel arbeite ich in der lokalen Regierung, und wir haben viele Bilder wie Mugshots, etc.Wir haben keine große Anzahl von Benutzern, aber wir müssen eine gute Sicherheit und Überwachung der Daten haben. Die Datenbank ist eine bessere Lösung für uns, da sie dies einfacher macht und wir keine Skalierungsprobleme haben werden.
nicht vage oder irgendetwas zu sein, aber ich denke, die Art der ‚Datei‘ werden Sie die Speicherung eines der größten bestimmenden Faktoren ist. Wenn Sie im Wesentlichen über ein großes Textfeld sprechen, das als Datei gespeichert werden könnte, wäre meine Präferenz für den DB-Speicher.
Während die Leistung ein Problem ist, ich glaube, moderne Datenbankentwürfe es viel weniger für kleine Dateien eines Problems gemacht haben.
Leistung beiseite, es hängt auch davon ab, wie eng gekoppelten die Daten. Wenn die Datei Daten enthält, die eng mit den Feldern der Datenbank verbunden sind, gehört sie konzeptionell nahe dazu und kann in einem Blob gespeichert werden. Wenn es Informationen enthält, die sich möglicherweise auf mehrere Datensätze beziehen oder außerhalb des Kontexts der Datenbank verwendet werden können, gehört es nach draußen. Ein Bild auf einer Webseite wird z. B. auf einer separaten Anforderung von der Seite abgerufen, die mit der Seite verknüpft ist. Daher kann es sich außerhalb der Website befinden (abhängig von den spezifischen Design- und Sicherheitserwägungen).
Unser Kompromiss, und ich verspreche, es nicht das Beste ist, wurde in der Datenbank, aber Bilder und andere Dateien außerhalb eher kleine XML-Dateien zu speichern.
Was halten Sie für eine kleine oder große Datei? – ubiquibacon
Ich sehe nirgendwo erwähnt, dass diese "Datei" auf die Festplatte geschrieben und erneut gelesen werden muss. –
Dies ist eine implizite Aufgabe, wenn Bilder später angezeigt werden müssen, insbesondere wenn sie in verschiedenen Formaten oder in Szenarien gespeichert werden, in denen sie aufgrund ihrer Größe nicht für längere Zeiträume im Speicher gehalten werden können. –