Ich muss eine Designentscheidung für die folgende Aufgabe finden:
Ich habe eine SQL Server-Datenbank, die eine Tabelle mit Bestellungen enthält. Die PDF-Dokumente werden von den Benutzern über einen einfachen Datei-Upload von einer Webseite hochgeladen und einer Bestellung zugeordnet. Es gibt nicht mehr als ein Dokument pro Bestellung (vielleicht kein Dokument, nie mehr als eines). Dazu öffnet ein Benutzer eine Webseite, gibt eine Auftragsnummer ein, bekommt den Auftrag angezeigt und klickt auf einen Upload-Button. So weiß ich, zu welchem Auftrag das hochgeladene Dokument gehört.
Ich erwäge nun zwei Möglichkeiten, die Dokumente auf dem Webserver zu speichern:
1) Erweitern Sie meine Auftragstabelle um eine varbinary(MAX)-Spalte und speichern Sie das PDF-Dokument direkt in diesem binären Feld.
2) Speichern Sie die PDF-Datei in einem bestimmten Ordner auf der Festplatte und geben Sie ihr einen eindeutigen Namen, der sich auf die Bestellung bezieht (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). Vielleicht muss ich die Dateien in Unterordnern speichern, einen pro Monat, und den Namen des Unterordners in der Auftragszeile in der Datenbank speichern, um zu vermeiden, dass sich zu viele tausend Dateien in einem Ordner befinden.
Nachdem die PDF-Dateien gespeichert wurden, können sie nach Eingabe der zugehörigen Auftragsnummer über einen Browser heruntergeladen und angesehen werden.
Ich tendiere zu Option (1), weil mir die Datenverwaltung einfacher erscheint, wenn ich alle relevanten Daten in einer Datenbank habe. Ich befürchte jedoch, dass ich mit der Zeit auf Leistungsprobleme stoßen könnte, da die Größe meiner Datenbank viel schneller wachsen wird als bei Lösung (2). Etwa 90 % oder sogar 95 % der gesamten Datenbankgröße würden nur aus den gespeicherten PDF-Dateien bestehen.
Hier finden Sie einige zusätzliche Informationen:
- Die PDF-Dateien haben eine Größe von jeweils etwa 100 Kilobyte.
- Rund 1500 Aufträge/PDF-Dateien pro Monat
- Windows Server 2008 R2 / IIS 7.5
- SQL Server 2008 SP1 Express
- Bei der Hardware bin ich mir nicht ganz sicher, ich glaube ein QuadCore Proc. und 4 GB RAM
- Die Anwendung wurde in ASP.NET Webforms 3.5 SP1 geschrieben.
(Mir ist bewusst, dass ich mit den obigen Zahlen nach etwa 2 Jahren die 4GB-Grenze der SQL Server Express Edition erreichen werde. Aber das können wir hier vernachlässigen, entweder werden alte Daten aus der Datenbank entfernt oder ein Upgrade auf eine Volllizenz ist eine mögliche Option).
Meine Frage ist: Was sind die Pro und Contras der Optionen und was würden Sie empfehlen? Vielleicht hatte jemand eine ähnliche Aufgabe und kann über seine Erfahrungen berichten.
Ich danke Ihnen im Voraus für Ihre Antwort!
Verwandt: