Frage

Ich habe eine Entwurfsentscheidung in Bezug auf Dokumente, die auf meine Website hochgeladen wurden: Ich kann sie entweder irgendwo auf meinem Dateiserver speichern oder ich kann sie als Blob in meiner Datenbank (MSSQL 2005) speichern. Wenn es sich um die Entwurfsentscheidung handelt, sind diese Dokumente vertraulich und müssen ein gewisses Maß an Schutz haben.

Die Überlegungen, an die ich gedacht habe, sind:

  1. Das Speichern auf dem Dateiserver sorgt für Huuuuuuuuge -Zahlen von Dateien, die alle in einem einzigen Verzeichnis abgeladen sind, und daher langsamerer Zugriff, es sei denn, ich kann eine vernünftige semantische Definition für eine Verzeichnisbaumstruktur ausarbeiten
  2. Otoh, ich vermute, dass der Dateiserver die Komprimierung etwas besser verarbeiten kann als der DB ... oder stehe ich falsch?
  3. Meine Instinkte sagen mir, dass die Sicherheit des DB stärker ist als die Dateiserver, aber ich bin mir nicht sicher, ob das unbedingt wahr ist.
  4. Ich weiß nicht, wie sich die Terabyte von Blobs in meiner DB auf die Leistung auswirken.

Ich würde hier einige Empfehlungen sehr schätzen. Vielen Dank!

War es hilfreich?

Lösung

In SQL Server 2005 haben Sie nur die Wahl der Verwendung VARBINARY(MAX) So speichern Sie die Dateien in der Datenbanktabelle oder halten Sie sie dann draußen.

Der offensichtliche Nachteil, sie außerhalb der Datenbank zu lassen, besteht darin, dass die Datenbank nicht wirklich steuern kann, was mit ihnen passiert. Sie könnten bewegt, umbenannt, gelöscht werden .....

SQL Server 2008 führt die vor FILESTERAM Attribut auf VARBINARY(MAX) Typen, mit denen Sie die Dateien außerhalb der Datenbanktabelle lassen können, aber dennoch unter der Transaktionskontrolle der Datenbank - z. B. Sie können die Dateien nicht einfach von der Festplatte löschen, die Dateien sind ein wesentlicher Bestand es. Großartig, wenn Sie es brauchen, aber es könnte für einige riesige Backups sorgen! :-)

Der SQL Server 2008 -Start zeigte einige "Best Practices", wann man Dinge in der Datenbank direkt speichert und wann FileStream verwendet werden soll. Diese sind:

  • Wenn die Dateien in der Regel weniger als 256 kb groß sind, ist die Datenbanktabelle die beste Option
  • Wenn die Dateien in der Regel über 1 MB groß sind oder mehr als 2 GB an Größe haben, ist fileStream (oder in Ihrem Fall: einfaches altes Dateisystem) Ihre beste Wahl
  • Keine Empfehlung für Dateien zwischen diesen beiden Margen

Um die Leistung Ihrer Abfragen nicht negativ zu beeinflussen, ist es oft eine gute Idee, die großen Dateien in ein separates Tabelle zu stecken, das alleine allgemeinen Separate Tabelle, gegen die Sie immer nur abfragen, wenn Sie wirklich die Megabyte von Dokumenten oder Bildern benötigen.

Das könnte Ihnen eine Vorstellung davon geben, woher Sie anfangen sollen!

Andere Tipps

Ich empfehle Ihnen dringend, die Dateisystemlösung zu berücksichtigen. Die Gründe sind:

  • Sie haben einen besseren Zugriff auf die Dateien (kostbar beim Debuggen), was bedeutet, dass Sie reguläre Konsolen-basierte Tools verwenden können
  • Sie können das Betriebssystem schnell und einfach nutzen, um die Last zu verteilen, z.
  • Sie können die OS -Zugriffskontrolllisten nutzen, um die Berechtigungen durchzusetzen.
  • Sie verstopfen Ihre Datenbank nicht

Wenn Sie sich Sorgen über große Mengen an Einträgen in Ihren Verzeichnissen machen, können Sie jederzeit ein Verzweigungsschema erstellen. zum Beispiel:

filename : hello.txt
filename md5: 2e54144ba487ae25d03a3caba233da71
final filesystem position: /path/2e/54/hello.txt

Es steckt viel "Es hängt" hinter diesem beliebten Thema ab. Da Sie sagen, dass die Dokumente sensibel und vertraulich sind, würde ich aus der Manschette mit dem Speichern in der Datenbank gehen. Hier sind einige Gründe:

  • Potenziell bessere Sicherheit. Es ist oft einfacher, ein Dateisystem zu hacken als eine Datenbank.
  • Bessere Volumensteuerung. Tausende von Dateien in einem Ordner können ein Betriebssystem belasten, wobei eine Datenbank Millionen von Zeilen in einer Tabelle ohne Blinken aufnehmen kann.
  • Besser suchen und scannen. Fügen Sie kategorisierende Spalten hinzu, wenn Sie die Daten laden, oder versuchen Sie es mit der Volltextindexierung, um die tatsächlichen Dokumente zu scannen.
  • Backups sind möglicherweise effizienter - fügen Sie Ihrem Sicherungsplan einfach eine weitere Datenbank hinzu, und Sie sind abgedeckt (wenn Sie natürlich Platzdetails ausarbeiten). Und diese Backup -Dateien sind eine weitere Ebene der Verschleierung für alle, die versuchen, Ihre sensiblen Dokumente zu erhalten.
  • SQL Server 2008 verfügt über Datenkomprimierungsoptionen, die hier helfen können. Das oder hat die Anwendung es? (Mehr Sicherheit durch Verschleierung vielleicht)

SQL Server 2008 verfügt auch über den FileStream -Datentyp, der hier helfen kann, aber ich bin damit nicht vertraut damit, eine Empfehlung für Ihre Situation zu geben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top