webentwicklung-frage-antwort-db.com.de

Speichern von Dokumenten als Blobs in einer Datenbank - Nachteile?

Die Anforderungen an mein Dokumentenmanagementsystem waren:

  1. Muss durch einfaches Kopieren von Verzeichnissen, Dateien usw. vor Diebstahl geschützt werden.
  2. Muss vor herkömmlicher Virusinfektion (Infektion der physischen Datei) sicher sein
  3. Muss schnell abgerufen werden
  4. Das Repository darf für zufällige Benutzer (Verzeichnisbenutzer usw.) nicht sichtbar sein.

Ich habe mich entschieden, alle Dokumente (und gescannten Bilder) als Blobs in der Datenbank zu speichern, und bisher ist meine Erfahrung wunderbar und das Abrufen von Dokumenten ist unglaublich schnell - es erfüllt alle Kriterien von oben und es gibt sogar einige zusätzliche Vorteile B. das automatische Speichern von Dokumenten zusammen mit der betreffenden Entität, einfaches und schnelles Durchsuchen von Inhalten, Entfernen aller Arten von Benutzeraktivitäten rund um das Öffnen und Benennen von Dokumenten usw. usw.

Meine Frage lautet: Gibt es ernsthafte Risiken oder Dinge, die ich bei dieser Konzeption und Implementierung übersehen habe?

BEARBEITEN Hinweis: DB ist PostgreSQL, verarbeitet BLOBS sehr gut und skaliert hervorragend. Die Umgebung ist Multi-User.

45
Johan Bresler

Wenn Ihre Datenbank immer größer wird, wird die Sicherung schwieriger. Die Wiederherstellung einer Tabelle mit über 100 GB an Daten macht Sie nicht glücklich.

Eine weitere Sache ist, dass alle Tabellenverwaltungsfunktionen mit zunehmendem Datenbestand immer langsamer werden.
Dies kann jedoch überwunden werden, wenn Ihre Datentabelle nur zwei Felder enthält: ID und BLOB.

Das Abrufen von Daten (über Primärschlüssel) wird wahrscheinlich erst lange nach dem Durchstoßen einer Sicherungskopie des Datensatzes zu einem Problem.

32
Jacco

Der Hauptnachteil, den ich bei der Verwendung von Blobs oft höre, ist, dass das Dateisystem ab einer bestimmten Größe große Dateien viel effizienter speichert und abruft. Es hört sich so an, als hätten Sie dies bereits in Ihrer Anforderungsliste berücksichtigt.

Es gibt eine gute Referenz (PDF) hier , die die Vor- und Nachteile von Blobs behandelt.

28
Bill the Lizard

Aus meiner Erfahrung waren einige Probleme:

  1. geschwindigkeit im Vergleich zu Dateien im Dateisystem.

  2. caching IMO der Webserver Wird das Zwischenspeichern von Statischen Inhalten verbessern. Der DB erledigt ebenfalls eine gute Arbeit, aber wenn der DB auch alle anderen Abfragen bearbeitet, erwarten Sie nicht, dass diese großen Dokumente lange dauern. Sie Müssen grundsätzlich die -Dateien zweimal übertragen. Einmal von der Datenbank zum Webserver und dann vom Webserver zum -Client.

  3. Speicherbeschränkungen Bei meinem letzten Job hatten wir eine 40 MB große PDF in der Datenbank und bekamen immer wieder Java OutOfMemoryErrors in der Protokolldatei. Wir haben schließlich festgestellt, dass die gesamten 80 MB PDF nicht nur einmal in den Heap eingelesen wurden, sondern dank einer Einstellung in Hibernate ORM ZWEIMAL (wenn ein Objekt veränderlich ist, wird eine Kopie zur Bearbeitung im Speicher erstellt). Nachdem das PDF zurück zum Benutzer gestreamt wurde, wurde der Haufen aufgeräumt, aber es war ein großer Erfolg, sofort 80 MB aus dem Haufen zu saugen, nur um ein Dokument zu streamen. Kennen Sie Ihren Code und wie Speicher genutzt wird!

Ihr Webserver sollte in der Lage sein, die meisten Ihrer Sicherheitsbedenken auszuräumen, aber wenn Dokumente klein sind und die Datenbank nicht bereits stark ausgelastet ist, sehe ich kein großes Problem darin, sie in der Datenbank zu haben.

13
CodingWithSpike

Ich habe gerade angefangen, das FILESTREAMing von SQL Server 2008 für BLOBs zu durchsuchen, und bin auf eine HUGE-Einschränkung (IMO) gestoßen - es funktioniert nur mit integrierter Sicherheit. Wenn Sie keine Windows-Authentifizierung verwenden, um eine Verbindung zum DB-Server herzustellen, können Sie die BLOBs nicht lesen/schreiben. Viele Anwendungsumgebungen können die Windows-Authentifizierung nicht verwenden. Sicher nicht in heterogenen Umgebungen.

Eine bessere Lösung zum Speichern von BLOBs muss vorhanden sein. Was sind die Best Practices?

4
tggagne

Dieser Artikel deckt die meisten Probleme ab. Wenn Sie SQL Server 2008 verwenden, überprüfen Sie die Verwendung des neuen FILESTREAM-Typs, wie von Paul Randal hier beschrieben.

2
Mitch Wheat

Das hängt vom Datentyp ab. Oracle oder SQLServer? Beachten Sie einen Nachteil - die Wiederherstellung eines einzelnen Dokuments.

2
Robert Vabo

Entschuldigung - die Antwort, die ich angeboten habe, basierte auf SQL Server, daher ist der Wartungsteil nicht angemessen. Datei-I/O-Vorgänge werden jedoch auf Hardwareebene ausgeführt, und bei jeder Datenbank werden zusätzliche Verarbeitungsschritte hinzugefügt.

Die Datenbank verursacht beim Abrufen des Dokuments zusätzlichen Aufwand. Wenn sich die Datei auf der Festplatte befindet, sind Sie nur so langsam oder so schnell wie die E/A auf dem Server. Sie sollten Ihr Meta auf jeden Fall in einer Datenbank verwalten, aber am Ende möchten Sie den UNC der Datei und den Benutzer auf Die Quelle verweisen, damit er aus dem Weg geht.

Aus Sicht der Wartung und Administration beschränken Sie sich beim Umgang mit MS SQL Server auf ein SAN. Lösungen wie Documentum verfolgen einen anderen Ansatz mit einfacher Speicherung auf der Festplatte und ermöglichen es Ihnen, eine Speicherlösung nach Ihren Wünschen zu implementieren.

EDIT

Lassen Sie mich meine Aussage klarstellen: Mit SQL Server haben Sie eingeschränkte Möglichkeiten, wenn Sie die physische Speicherkapazität der Box überschreiten. Dies ist in der Tat eine der großen Schwächen von Sharepoint, dass Sie nicht einfach irgendeine Art von Netzwerkspeicher anschließen können.

0
David Robbins

Von dem, was ich beim Speichern von Inhaltsdateien als Blobs sowohl in SQL Server als auch in Oracle erlebt habe, funktioniert es mit einer kleinen Datenbank und mit einer geringen Anzahl von angemeldeten Benutzern. Abhängig von der Größe der Dateien können die Serverressourcen beim gleichzeitigen Abrufen großer Dateien beeinträchtigt werden. Das Archivieren von Datenbanken mit großen Dateisätzen wird aufgrund der Zeit für die Wiederherstellung und der Unfähigkeit, Dokumente aus dem Archiv abzurufen, problematisch.

Wenn es sich bei diesen Dateien um Unternehmensdatensätze handelt und dies die autorisierende Kopie der Datensätze ist, können Compliance- und Aufbewahrungsprobleme auftreten, insbesondere wenn Sie die Dateien archivieren. Auch die Suche und Versionskontrolle kann zu einem riesigen Problem werden.

Möglicherweise möchten Sie ein ECM-System mit einer API untersuchen, anstatt das Rad neu zu erfinden.

0
Mike Clarke