2017-01-09 5 views
1

Ich habe eine MySQL-Datenbank, die mit elektrischen Messungen arbeitet. Es hat auch eine Tabelle contracts Verträge Parameter enthält, und eine Tabelle, die die documents Blobs von Dokumenten entsprechend bestimmten Vertrag enthält:So speichern Sie Dokumente im Verzeichnis statt in der Datenbank

+-------------+---------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+-------------+---------------------+------+-----+---------+----------------+ 
| id   | bigint(20) unsigned | NO | PRI | NULL | auto_increment | 
| contract_id | bigint(20) unsigned | YES |  | NULL |    | 
| name  | varchar(512)  | YES |  | NULL |    | 
| document | longblob   | YES |  | NULL |    | 
+-------------+---------------------+------+-----+---------+----------------+ 

Dokumente hinzugefügt und abgerufen werden von den Benutzern aus dem Programm, das mit der Datenbank verbindet. Kürzlich ist die Datenbank zu groß geworden, und ich möchte ihre Größe auf Kosten von Dokumenten reduzieren. Ich nehme an, dass ein Feld document eine Textreferenz für die Datei sein sollte. Wo sollte sich diese Referenz beziehen? Sollte es ein freigegebener Ordner sein? Wie könnte das Benutzerprogramm auf diesen Ort zugreifen? Ich frage, weil ich wissen möchte, was in diesem Fall die beste Praxis ist. Vielen Dank.

+0

tun verwenden Sie jedes Scripting/Programmiersprache für die Dateneingabe? wie C, Perl, Ruby, Python, PHP usw.? – marmeladze

+0

@ marmeladze Programm für Benutzer ist in Qt4/C++ geschrieben. –

+1

na dann. Erstellen Sie einen Speicherordner und schreiben Sie Dateien dorthin. In einem guten Szenario wird das Benutzerprogramm hier nicht direkt zugreifen. Sie nehmen es, schreiben in einen temporären Ordner, dann liest der Server-Handler von tmp und schreibt zum endgültigen Ziel. Ich bin nicht gut in Qt, aber es gibt relevante Antworten hier - http://StackOverflow.com/Questions/37067014/qt-Uplod-Put-Afile http: // Stackoverflow.com/questions/16735595/Hochladen von Dateien-using-qt-qnetworkrequest – marmeladze

Antwort

0

Viele Programmierer halten es für eine gute Praxis, Dokumente (PDFs, Bilder, Dokumente, Tabellenkalkulationen usw.) als Dateien und nicht als BLOBs in einem dbms zu speichern.

Sie haben Ihre Serverumgebung nicht beschrieben, daher ist es schwer, eine Verzeichnisstruktur für Ihren Speicher vorzuschlagen. Wenn Sie jetzt verwenden Sie mehr als eine Maschine mit Ihrer Anwendung, oder Sie jemals mehr als eine Maschine verwenden, müssen Sie diese Dokumente auf einem freigegebenen Dateisystem, so dass alle Ihre Maschinen können sie von einem gemeinsamen Speicherort lesen.

Zum Beispiel könnten Sie einen freigegebenen Ordner auf einem Server erstellen, es dann auf jeder Maschine montieren Ihre Anwendung bei

/mnt/electricowizard/docs 

Unter diesem Laufen Sie Ihre Dokumente wie diese speichern könnten:

/mnt/electricowizard/docs/cust_0001/2015/001.pdf 
/mnt/electricowizard/docs/cust_0001/2015/002.tif 
/mnt/electricowizard/docs/cust_0001/2015/contract003.docx 
/mnt/electricowizard/docs/cust_0001/2016/asbuilt001.jpg 
/mnt/electricowizard/docs/cust_0001/2016/asbuilt002.jpg 

Siehe die Hierarchie? Kunde/Jahr/Dokument. Dies ist in der Regel eine gute Struktur in einem Mehrbenutzersystem, da Sie damit Inhalte für bestimmte Benutzer isolieren können. Es verhindert auch, dass ein bestimmtes Dateisystemverzeichnis zu viele Dokumente enthalten muss. Wenn Sie das tun, kann das besonders unter Windows ineffizient werden.

In Ihrer Datenbanktabelle haben Sie möglicherweise eine Spalte mit dem Namen docpath oder so. Es würde solche Werte enthalten.

/cust_0001/2015/001.pdf 
/cust_0001/2015/002.tif 
/cust_0001/2015/contract003.docx 
/cust_0001/2016/asbuilt001.jpg 
/cust_0001/2016/asbuilt002.jpg 

Die Lage des Dateisystems (/mnt/electricowizard/docs/) ist ein Konfigurationscharakteristik des Programms, und die Lage der docs innerhalb des Dateisystems ist eine Charakteristik jedes doc.

Es gibt natürlich auch andere Möglichkeiten, Dokumente zu organisieren. Viele Menschen haben sich mit diesem Problem beschäftigt, indem sie das, was sie dachten, als "Bilder" und nicht als "Dokumente" bezeichneten. Diese Tatsache sollte Ihnen helfen, nach mehr Informationen zu suchen.

Ein weithin angenommen Beispiel: uploads Wordpress-Ordner:

Verwandte Themen