Datenbanken und mehr

25. März 2007

Gehören Dokumente in die Datenbank?

Filed under: DB Design — Urs Gehrig @ 22:49

Über diese Frage kann man wohl fast endlos streiten.

Argumente für ein Ablegen von Dokumenten in der DB finde ich rasch sehr viele:

  • Verfügbarkeit: Die Dokumente stehen immer zur Verfügung. Ein locken der Files durch andere Applikationen kann nicht auftreten. Auch unbedachte Benutzer können uns durch ein Löschen oder Umbenennen von Files auf dem Server nichts anhaben.
  • Berechtigung: Schreiben wir unsere eigene Applikation, welche die Dokumente von der DB holt, können wir jedes beliebige und noch so detailierte Berechtigungssystem realisieren. Ein Berechtigungssystem, das weit über die Möglichkeiten des Dateisystems geht. So können wir z.B. einem Benutzer lediglich die Berechtigung auf Dokumente geben, welche vor dem 1. April 2006 ausschliesslich von Hans Huber angelegt wurden.
  • Synchron mit Metadaten: Da kein Benutzer unsere Dokumente direkt auf dem Filesystem und somit ohne das Wissen der Applikation durchführen kann, sind die ebenfalls in der DB abgelegten Metadaten der Dokumente mit diesen immer synchron. Ein Ändern des Dokuments und ein nicht nachtragen der Metadaten kann nicht vorkommen – Vorausgesetz wir haben beim Schreiben der Applikation nicht geschlammt.
  • Historisierung: Eine weitere Version eines bestehenden Dokuments ist rasch abgelegt; einfach eine neue Zeile in unserer Dokumententabelle einfügen. Ein kompliziertes Namenskonventionsschema für die Files auf dem Server benötigen wir nicht.
  • Distribution: Wird der Server zu klein und müssen wir unsere Applikation auf einer neuen Hardware installieren, genügt ein einfaches Backup & Restore unserer Datenbank; die Dokumente kommen automatisch mit. Ein aufwendiges umbenennen der Dokumentreferenzen in der DB entfällt genauso wie das exakte nachführen der ganzen Verzeichnisstruktur mit all ihren Security Einstellungen.
  • XML: Ist das Dokument gar ein XML File, dann ist der neue XML Datentyp vom SQL Server 2005 ein weiterer Trumpf für das Ablegen in der DB. Mit Hilfe von XQuery lassen sich die Dokumente effizient durchsuchen und gar bearbeiten.

Gegen ein Ablegen von Dokumenten in der Datenbank finde ich jedoch nur wenige Gründe:

  • Performance: Dieses Argument höre ich immer wieder – angetroffen habe ich es aber noch nie!
  • Grösse: Die Grösse der DB kann rasch sehr schnell anwachsen und dessen Handling wird damit schnell einmal mühsam. Diese Situation lässt sich aber entschärfen, wenn wir die Dokumente in einer separaten Tabelle und diese wiederum in einer separaten Filegroup führen. So lassen sich die eigentlichen Daten unabhängig von den Dokumenten backupen und restoren. Wenn wir die Dokumententabelle gar in einer eigenen DB führen, können wir für die Dokumente sogar ein eigenes Recovery-Modell spezifizieren. Einen wichtigen Nebeneffekt hat das Abtrennen der Dokumente in eine eigene Tabelle auch noch. Alle unbedachten Entwickler, welche das Abfragen aller Metadaten der Dokumente mit SELECT * FROM table lösen, machen uns so keine Angst mehr. Was wäre, wenn wir diese Trennung nicht hätten? Genau, tausende von Dokumenten und somit hunderte oder noch mehr von Gigabytes an Daten würden übers Netzwerk vom Server zum Client transferiert, wo diese dann unbenützt gleich wieder fortgeworfen werden. Das nenne ich ein unnötiges Performance Problem.

Damit dürfte meine Antwort auf die einleitende Frage „Gehören Dokumente in die Datenbank“ wohl klar sein – Ja, wann immer möglich!

Advertisements

Schreibe einen Kommentar »

Es gibt noch keine Kommentare.

RSS feed for comments on this post. TrackBack URI

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

Erstelle eine kostenlose Website oder Blog – auf WordPress.com.

%d Bloggern gefällt das: