| |
ADO.NET / DatenbankenAblegen von Dateien | | | Autor: msSuper | Datum: 03.12.15 16:17 |
| Hallo Team,
für ein umfangreiches Projekt werden sehr viele Dateien, 80% PDF, 10% JPG und 10% Word-Dateien, insgesamt 200.000 Dateien mit 40 GB Speicher abgelegt. Vorsichtig geschätzt können in den nächsten 3 Jahren daraus insgesamt 400.000 Dateien mit 80 GB werden.
Derzeit liegen diese verteilt auf vielen Access.MDB Dateien. In einer einzigen Tabelle wird dann Name und Schlüssel sowie Nummer der Access Datenbank gespeichert in der die Datei dann tatsächlich abgelegt ist.
Dies würde ich gerne vereinfachen und habe mir im SQL Server 2012 das FILESTREAM Objekt angesehen.
Gerne hätte ich gehört welche Erfahrungen ihr damit gemacht habt.
Vielleicht habt ihr aber noch eine bessere Idee, wie ich diese Dateien sinnvoll ablegen kann. Achso, normaler Fileablage in Windows Ordnern scheitert daran, dass auf den Dateien jeweils unterschiedliche Zugriffsberechtigungen liegen können. Generell sollen die Dateien auch nicht über den Explorer geöffnet werden sondern nur über die Software.
Bin gespannt! | |
Re: Ablegen von Dateien | | | Autor: Manfred X | Datum: 03.12.15 22:50 |
| Hallo!
Du willst also eine große Menge an Daten verwalten, die
in diversen Datenformaten - verteilt auf diverse AccessDB's -
vorliegen.
Da wäre zunächst zu klären, welche Struktur(en) vorhanden sind,
d.h. welche Bezüge zwischen einzelnen Datensegmenten vorliegen
Im nächsten Schritt wäre die Organisation der Zugriffsrechte
auf diese Strukturen festzulegen.
Erst daraus kann der Aufbau einer Datenbank abgeleitet werden.
Daran schließt sich die Überlegung an, ob und ggf. welche Informationen
in Filestreams abzulegen wären.
Deine diesbezüglichen Angaben sind vage. Gibt es überhaupt Relationen?
Ich sehe noch nicht, weshalb Du die Ablage dieser Dateien
in Windows-Ordnern verwirfst. Dateien können mit spezifischen
Zugriffsrechten ausgestattet werden. Es wäre auch zu prüfen, ob
eine Verschlüsselung der Datei-Inhalte zweckmäßig sein könnte.
Eventuell die Problem-, Zielstellung genauer beschreiben ... | |
Re: Ablegen von Dateien | | | Autor: msSuper | Datum: 04.12.15 08:34 |
| Hallo Manfred,
vielen Dank dass Du Dir die Zeit genommen hast und mir geantwortet hast.
Gerne schreibe ich noch ein paar Details zu dem Projekt um zu verdeutlichen was ich genau bezwecken möchte.
Es geht um ein kleines ERP System was bereits etabliert ist ( ca 5 Jahre) und die Daten derzeit auch strukturiert ablegt.
Programmiert ist es in Visual Studio NET ich nutze noch die 2013 Version.
Alle einfach zu fassenden Daten liegen in einer MS-SQL Server Datenbank SQL2012 (Artikel, Lieferanten, Kunden, Belege, etc...)
Zusätzlich existieren zu Artikeln und Werkzeugen grafische Ansichten (.PDF und jpg).
Ebenso werden alle erzeugten Belege (Auftragsbestätigungen, Lieferscheine, Rechnungen, etc.) als PDF abgelegt und archiviert.
Daher kommen die großen Mengen und Volumen zustande.
Die Software zeigt z.B. beim auflisten der Lieferscheine neben den Strukturdaten wie Lieferschein Nummer, Datum, Sachbearbeiter und Adresse auf der rechten Seite eine Vorschau des Lieferschein als PDF Datei an.
Dies ist in allen Auflistungen der Fall (Artikel, Werkzeuge, Prüfungsberichte, Rechnungen, Bestellungen, etc..)
Zur Zeit ist es so, dass in den jeweiligen Tabellen (Artikel, Auftragsbestätigung, Lieferscheine) ein Verweis auf eine Dokumentenummer abgelegt wird.
In einer übergeordneten Dokumententabelle steht zu jeder Dokumentennummer der Original Dateiname und Erstelldatum sowie ein Verweis(Nummer) zu der Access Datenbank in der dann die tatsächliche Datei liegt.
Bei den Accessdateien habe ich das dann so gelöst, dass neue Dokumente immer angefügt werden. Dabei wird vorher geprüft wie groß die bisherige Ablagedatei ist und bei etwa 900 MB wird eine weitere Access Datei angelegt und dort die nachfolgenden Dokumente eingestellt.
Nun wird das ganze aber eher unhandlig (z.B. im Bezug auf Datensicherung) wenn man 100 Access Dateien hat.
Noch unhandliger wird das meiner Meinung nach, wenn ich Hundertausende von Dateien in Hunderten von Ordnern backup- und restoren soll. Daher der Wunsch die Informationen in möglichst wenig Dateien zu handlen.
Von den Zugriffsberechtigung ist das bisher durch das Programm festgelegt die Artikel auflisten und filtern darf nur eine bestimmte Gruppe. Bei den Belegen ist es ebenso beschränkt.
Zur Zeit kann ich die Zugriffe beliebig festlegen und einer Gruppe von Personen die vorher die Werkzeugdateien nicht angezeigt bekommen hat dann im nachhinein anzeigen oder verwehren je nachdem wie es nötig it.
Bestimmte Personden dürfen auch nur Artikel bestimmter Kunden sehen, bestimmte Mitarbeiter nur die Rechnungen von ihren eigenen Kunden u.s.w.
Wenn ich dafür NTFS Berechtigungen verwende müsste ich vermutlich öfters die Zugriffsberechtigung von 10.000 Dateien nachträglich ändern. Dies halte ich für fehleranfällig.
Die Idee mit der Verschlüsselung ist ganz nett, jedoch ist das entschlüsseln zeitaufwendig. Ob man dann noch flüssig durch Listen blättern kann und gleichtzeitig eine Live Blick auf die Dateien bekommt mag ich zu bezweifeln.
Daher die Überlegung nach Filestream in einem SQL Server.
Bisher habe ich sehr wenig zu tatsächlichen Erfahrungen von Anwendern gehört, gerade im Hinblick mit so einer Vielzahl von Daten.
Danke, wenn Du es beim Lesen bis hierhin durchgehalten hast | |
Re: Ablegen von Dateien | | | Autor: Manfred X | Datum: 04.12.15 10:22 |
| Hallo!
Mit der Performance bei derart umfangreichen Datenbanken keine Erfahrung.
Für diesen Anwendungs-Fall scheinen Filestreams aber geeignet.
Sie bieten den Vorteil, daß die JPG- und PDF- Byteserien
code-seitig in entsprechenden Tabellenspalten verwaltet
und per SQL-Select direkt mit abgefragt werden können.
Du kannst die bereits bestehenden (SQL-) Datenbank-Tabellen um
Filestream-Spalten erweitern und die bislang verteilten Daten
dort reinpacken.
Engpässe könnte es geben, falls durch eine SQL-Abfrage
zahlreiche Datensätze gelesen werden sollen, wobei in jedem
Datensatz Filestream-Spalten enthalten sind. Das aus der
Datenbank zu übertragende und im Hauptspeicher als In-Memory-DB
abzulegende Datenvolumen könnte übermäßig groß werden.
Ist (z.B. durch Vorab-Prüfung) sichergestellt, daß bei solchen
Abfragen stets nur eine begrenzte Zahl von Datensätzen den
Filterkriterien entspricht, sollten keine Probleme auftreten.
Bei der Verwaltung von größeren JPGs kann die Übertragung von
Vorschau-Thumbnails bei Abfragen zweckmäßig sein.
Für Deinen Fall ist eventuell das "FileTable"-Konzept von Interesse:
http://www.databasejournal.com/features/mssql/filestream-and-filetable-in-sql-server-2012.html
Allerdings:
[I]The file & directory data stored in a FileTable is exposed through a Windows
share location for non-transactional file access (the ability to access files
without prior authorization from the Database Engine) for Windows API based
applications. For a Windows application, this looks like a normal network share
location with its files and directories. [/I] | |
Re: Ablegen von Dateien | | | Autor: msSuper | Datum: 04.12.15 12:31 |
| Hallo Manfred,
von den .jpg werden bereits automatisch Thumbnails erzeugt, ebenso werden einige häufig angezeigte PDF in jpg umgewandelt damit sie schneller erscheinen.
Werde dann wohl mal einen Test machen müssen.
Die Dokumente landen aber in jedem Fall nicht in der ERP Datenbank sondern auf jeden Fall in einer separaten Dokumentendatenbank. Damit könnte man wenn nötig diese auch auf einen zweiten SQL Server ausgliedern. | |
Re: Ablegen von Dateien | | | Autor: Christoph1972 | Datum: 05.12.15 10:01 |
| Hi,
also ich lege solche Dokumente unter varbinary(MAX)in einer gesonderten Tabelle ab. Zusätzlich komprimiere ich das Byte Array mit GZip. So ist die Datensicherung auch sehr einfach.
Gruß
Christoph
| |
Re: Ablegen von Dateien | | | Autor: FZelle (Moderator) | Datum: 09.12.15 12:54 |
| Dann solltest du dich dringend mit den FileStreams beschäftigen, denn was du machst ist alles andere als Scalierbar und MS hat deswegen extra die FileStreams eingeführt. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere Infos
|