Ich muss eine Designentscheidung für die folgende Aufgabe finden:
Ich habe eine SQL Server-Datenbank und sie enthält eine Tabelle von Bestellungen. PDF-Dokumente werden von Benutzern über einen einfachen Dateiupload von einer Webseite aus hochgeladen und einer Bestellung zugeordnet. Es gibt nicht mehr als ein Dokument pro Bestellung (vielleicht kein Dokument, niemals mehr als eins). Zu diesem Zweck öffnet ein Benutzer eine Webseite, gibt eine Bestellnummer ein, ruft die Bestellung ab und klickt auf eine Schaltfläche zum Hochladen. So weiß ich, zu welcher Bestellung das hochgeladene Dokument gehört.
Jetzt überlege ich zwei Optionen, um die Dokumente auf dem Webserver zu speichern:
1) Erweitere meine Tabelle der Bestellungen um eine Spalte vom Typ varbinary(MAX) und speichere das PDF-Dokument direkt in diesem binären Feld.
2) Speichere die PDF-Datei in einem spezifischen Ordner auf der Festplatte und gebe ihr einen eindeutigen Namen in Bezug auf die Bestellung (zum Beispiel meine Bestellnummer, die ein Primärschlüssel in der Datenbank ist, oder eine GUID, die ich in einer zusätzlichen Spalte der Bestelltabelle speichern könnte). Möglicherweise muss ich die Dateien in Unterordnern speichern, einen pro Monat, und den Unterordnernamen in der Bestellzeile in der Datenbank speichern, um zu verhindern, dass zu viele tausend Dateien in einem Ordner gespeichert werden.
Nachdem die PDF-Dateien gespeichert sind, können sie nach Eingabe der entsprechenden Bestellnummer über den Browser heruntergeladen und angesehen werden.
Ich tendiere zur Option (1), weil mir die Datenverwaltung einfacher erscheint, wenn alle relevanten Daten in einer Datenbank sind. Aber ich habe ein wenig Angst, dass ich im Laufe der Zeit auf Leistungsprobleme stoßen könnte, da die Datenbankgröße viel schneller wachsen wird als bei Lösung (2). Etwa 90% oder sogar 95% der Gesamtgröße der Datenbank würden nur aus diesen gespeicherten PDF-Dateien bestehen.
Hier sind einige zusätzliche Informationen:
- Die PDF-Dateien haben jeweils eine Größe von ca. 100 Kilobyte
- Etwa 1500 Bestellungen/PDF-Dateien pro Monat
- Windows Server 2008 R2 / IIS 7.5
- SQL Server 2008 SP1 Express
- Nicht ganz sicher über die Hardware, ich glaube an einen QuadCore-Prozessor und 4 GB RAM
- Die Anwendung ist in ASP.NET Webforms 3.5 SP1 geschrieben
(Mir ist bewusst, dass ich mit den oben genannten Zahlen nach ca. 2 Jahren das 4-GB-Limit der SQL Server Express-Edition erreichen werde. Aber das können wir hier außer Acht lassen, entweder das Löschen alter Daten aus der Datenbank oder ein Upgrade auf eine Vollversion wären eine mögliche Option.)
Meine Frage ist: Was sind die Vor- und Nachteile der Optionen und was würden Sie empfehlen? Vielleicht hatte jemand eine ähnliche Aufgabe und kann über seine Erfahrungen berichten.
Vielen Dank im Voraus für die Antwort!
Verwandt: