AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Anwendungsdesign: WO Dateianhänge speichern?

Anwendungsdesign: WO Dateianhänge speichern?

Ein Thema von Codehunter · begonnen am 11. Aug 2017 · letzter Beitrag vom 15. Aug 2017
Antwort Antwort
Seite 1 von 2  1 2   
Foren-Tage 2017
DIE Konferenz für Delphi-Entwickler mit vielen Vorträgen und ganztägigen Workshops, veranstaltet u.A. von der Delphi-PRAXiS und Embarcadero.
21.-23. September 2017 in Hamburg · Mehr Infos unter forentage.de.
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
943 Beiträge
 
Delphi XE4 Professional
 
#1

Anwendungsdesign: WO Dateianhänge speichern?

  Alt 11. Aug 2017, 08:30
Datenbank: MariaDB • Version: 10 • Zugriff über: Irgendwas
Moin!

Man kennt das ja von diversen Wawi- und Fibu-Systemen: Zu einzelnen Datensätzen können eine oder mehrere Dateianhänge wie z.B. eingescannte Fremdbelege angefügt werden. Ich habe nun schon viele verschiedene Softwares gesehen. Da gab es schlechte Lösungen und noch schlechtere. Das übelste das mir jemals unter gekommen ist war ein Wawi, welches bei Dateianhängen lediglich einen Datei-Öffnen-Dialog zeigte und dann den dort gewählten Dateipfad als String in ein varchar()-Feld schrieb. Das war irre praktisch wenn man eine Mehrplatzinstallation hatte, ein Anwender mal fix ein PDF von seinem USB-Stick angehängt hat und der andere panisch den Wawi-Support anrief weil er an die Anhänge nicht ran kam

Eine Variante davon ist, wenn eine Client-Server-Installation konstruktivisch ein Netshare voraus setzt, wo solche gemeinsam genutzten Dateien abgelegt werden. Das funktioniert so lange reibungslos, wie man seine Software über Distributoren mit Wartungsverträgen vertreibt. Da kann man davon ausgehen, dass Netshares auch überall, z.B. per GPO mit dem selben Laufwerksbuchstaben laufen oder aber ein korrekter UNC verwendet wird. Bei Consumer-Software wie z.B. Vereinsverwaltungen dagegen funktioniert das wieder eher schlecht als recht, weil sich die typische Clientel selten mit Domaincontrollern, Zugriffsrechten und/oder DNS-Problemen befasst.

Die dritte Lösung die ich kenne ist, Dateien als BLOB direkt in die Datenbanken zu speichern. Damit geht man zwar was die Verfügbarkeit angeht auf Nummer sicher, bläht seine DB aber ungemein auf und ist in der Regel auch gezwungen eine Dateigrößenbeschränkung zu führen. Das gibt auch wieder Frust bei den Anwendern, wenn der Import eines 100 MB großen, mit 4096 dpi (interpoliert!) gescannten Dreiseiters mit einer Fehlermeldung abwürgt und keiner weiß, wie man ein PDF kleiner bekommt.

Wie löst ihr diese Aufgabenstellung? Gibt es noch andere Lösungswege die ich noch nicht kenne? Ich bin da neugierig

Viele Grüße
Cody
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und manchmal Löcher in der Wand dahinter.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
6.436 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Anwendungsdesign: WO Dateianhänge speichern?

  Alt 11. Aug 2017, 08:49
Mir fällt da z.B. MongoDB GridFS ein. Das ist quasi wie ein Dateisystem auf eine NoSQL Datenbank gestülpt.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
TigerLilly
Online

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
28 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Anwendungsdesign: WO Dateianhänge speichern?

  Alt 11. Aug 2017, 09:29
Wen du einen performanten DB-Server im Hintergrund hast mit viel Speicher + Plattenplatz und ein DB-System, das die Verwaltung von eingebetteten Dokumenten gut unterstützt (zB FILESTREAM by MSSQL), dann ist es besser, wenn die Docs in der DB landen.

Eine Alternative ist es, in der DB nur den relativen(!) Pfad zu den Dokumenten zu speichern + je User einen Root-Pfad zum Dokumenten-Verzeichnis zu führen.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
2.442 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Anwendungsdesign: WO Dateianhänge speichern?

  Alt 11. Aug 2017, 11:52
In der eigenen Software ein DB-Feld mit einer GUID oder einem anderen Identifier, eventuell auch der Dateianhangname.
Die Dokumente gehören in ein System zur Dokumentenverwaltung wie Alfresco.
Das Rad muss nicht viereckig neu erfunden werden Ü
Michael Justin
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.097 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: Anwendungsdesign: WO Dateianhänge speichern?

  Alt 11. Aug 2017, 11:57
Alfresco speichert die Daten allerdings auch nur in einem Verzeichnis auf einem Rechner/Server ab. Die bekommen dann eine ID, lassen sich aber mit dem, für den Dateityp, passenden Programm direkt öffnen wenn man auf das Verzeichnis Zugriff hat. Da wird also auch nichts verschlüsselt.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
2.442 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Anwendungsdesign: WO Dateianhänge speichern?

  Alt 11. Aug 2017, 15:47
Alfresco speichert die Daten allerdings auch nur in einem Verzeichnis auf einem Rechner/Server ab. Die bekommen dann eine ID, lassen sich aber mit dem, für den Dateityp, passenden Programm direkt öffnen wenn man auf das Verzeichnis Zugriff hat. Da wird also auch nichts verschlüsselt.
Ist das Repository nicht eher eine Datenbank mit diversen Views (CIFS, SMB, FTP, WebDAV) und APIs als eine nackte Verzeichnisstruktur?

Zitat:
The actual binary streams of the content are stored in files managed in the repository, although these files are for internal use only and do not reflect what you might see through the shared drive interfaces.
http://docs.alfresco.com/4.0/concept...epo-about.html
Michael Justin
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.097 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Anwendungsdesign: WO Dateianhänge speichern?

  Alt 11. Aug 2017, 16:22
Alfresco speichert die Daten allerdings auch nur in einem Verzeichnis auf einem Rechner/Server ab. Die bekommen dann eine ID, lassen sich aber mit dem, für den Dateityp, passenden Programm direkt öffnen wenn man auf das Verzeichnis Zugriff hat. Da wird also auch nichts verschlüsselt.
Ist das Repository nicht eher eine Datenbank mit diversen Views (CIFS, SMB, FTP, WebDAV) und APIs als eine nackte Verzeichnisstruktur?

Zitat:
The actual binary streams of the content are stored in files managed in the repository, although these files are for internal use only and do not reflect what you might see through the shared drive interfaces.
http://docs.alfresco.com/4.0/concept...epo-about.html
Kann natürlich sein. Ich hatte mir die Software vor längerer Zeit mal angeschaut. Es wird ja eine PostgreSQL DB mitinstalliert. Ich meine mich aber auch zu erinnern, dass man ein Verzeichnis angeben konnte/musste wo die Daten abgespeichert wurden. Und da waren auch alle Daten in alle Revisionen einzusehen. Man musste nur wissen was das ursprünglich für ein Dateityp war um die Datei mit der richtigen Anwendung zu öffnen.

Aber da will ich mich jetzt mal nicht zu weit aus dem Fenster lehnen. Kann sein, dass die Original Daten in Wirklichkeit irgendwo abgespeichert sind wo man als normaler Benutzer nicht rankommt.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
5.570 Beiträge
 
Delphi 7 Personal
 
#8

AW: Anwendungsdesign: WO Dateianhänge speichern?

  Alt 11. Aug 2017, 22:35
Eine Variante davon ist, wenn eine Client-Server-Installation konstruktivisch ein Netshare voraus setzt, wo solche gemeinsam genutzten Dateien abgelegt werden. Das funktioniert so lange reibungslos, wie man seine Software über Distributoren mit Wartungsverträgen vertreibt. Da kann man davon ausgehen, dass Netshares auch überall, z.B. per GPO mit dem selben Laufwerksbuchstaben laufen oder aber ein korrekter UNC verwendet wird. Bei Consumer-Software wie z.B. Vereinsverwaltungen dagegen funktioniert das wieder eher schlecht als recht, weil sich die typische Clientel selten mit Domaincontrollern, Zugriffsrechten und/oder DNS-Problemen befasst.
One fits all, kannst Du vergessen. Irgendeiner der handelden (incl. des Programmierers) bringt es fertig einen Scan eines Dokumentes als Dokument und nicht als Bild abzulegen, und dann knirscht es wieder mal im Gebälk. Und dabei ist es egal ob Du die Daten als Datei in einem FS ablegst oder als BLOB in einer/der Datenbank ablegst. Nach meiner Erfahrung hast Du bei extern abgelegten Daten wenigstens eine Chance im Falle eines Falles die Daten zu reanimieren, sofern der Dateiname einen eindeutigen Hinweis auf den Datenbankeintrag beinhaltet. Falls die DB struwellig wird ist der Aufwand um einiges höher (nach meiner Erfahrung).

Gruß
k-H
Programme gehorchen nicht Deinen Absichten
sondern Deinen Anweisungen
Do it with Delphi Programming
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
1.899 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: Anwendungsdesign: WO Dateianhänge speichern?

  Alt 11. Aug 2017, 23:38
Ein DMS wie Alfresco scheint mir eine vernünftige Lösung, auch wenn ich es im Detail nicht kenne. Passt vielleicht nicht unbedingt ins Konzept einer jeden Software.
Wir machen es so, dass die Datenbank Dateiname, Pfad, Typ und die Datei selbst in einem BLOB schluckt.
Darüber liegt für Webclients eine Schicht, die webbasierten Upload und Download unterstützt und es per Default (ursprünglich) in die DB schiebt, analog zum FAT Client.
Da die Dokumente alle ein fachlichen Zusammenhang haben und damit einen mehr oder weniger festen Dokumenttyp, kann für den fachlichen Vorgang definiert werden, ob der Webclient das Dokument vor dem Upload komprimiert/(mehrere) gezippte Dateien erwartet und ob es in die DB oder im FS des Webserver oder doppelt abgelegt werden soll. Jede Datei die hochgeladen wird, wird umbenannt und mit der ID des Datensatzes versehen, unter dem der Vorgang und die Metadaten dazu abgelegt sind.
Damit realisieren wir hauptsächlich den Transfer von Importdaten (z.B. CSV, gezipt) oder den Export von CSV, Reports, Spreadsheet Reports.
Der Transfer zum DBServer bietet für den Import den Vorteil, dass dort lokal dann mit proprietäten Verfahren sehr schnell große Datenmengen importiert werden können. Das Verfahren bietet eine Menge Möglichkeiten für Review, Reimport usw., die Erfahrung hat leider gezeigt, dass CSV Daten beliebig schlecht sein können und maximale Flexibilität auch maximale Entspannung bei Datenproblemen bietet.
Für reine Dokumenten Verwaltung / Nachweis / OCR review ist das natürlich in der Form nicht notwendig.
Gruß, Jo
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
992 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

AW: Anwendungsdesign: WO Dateianhänge speichern?

  Alt 12. Aug 2017, 18:57
Ich würde es so machen das nur der relative Pfad in der DB gespeichert wird.
So dann man von aussen entscheided wo genau das jetzt liegt, Serververzeichnis, FTP, WebDav, Cloud, etc.
Dann würde die DB auch bei grundsätzlichem Wechsel der Systeme noch stabil laufen, ohne upgedatet werden zu müssen.

Rollo

Update
Ok, TigerLilly hatte ja schon ähnliches Vorgeschlagen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf