vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
Ablegen 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!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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 ...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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]
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Ablegen von Dateien 
Autor: ModeratorFZelle (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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Ablegen von Dateien 
Autor: DotNetErbse
Datum: 10.12.15 15:47

die in der DB abgelegten Grafikfiles kann man doch in der Anwendung skalieren


Mit freundlichen Gr??en
DotNetErbse


[Es hei?t Paket und nicht Packet, auch wenn Standard augenscheinlich von Standar(t)e kommt,hei?t es dennoch Standar(d)]

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Ablegen von Dateien 
Autor: Christoph1972
Datum: 11.12.15 22:11

Danke für die Info! Ja, FileStreams sind sicher (ohne sie zu kennen) die bessere Lösung. Das meine Lösung nicht skalierbar ist, war in gewissen Projekten sogar gewünscht, damit nur mein Programm mit den Daten etwas anfangen kann. FileStreams kommen dann später mal drann

Gruß
Christoph

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel