Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Viele große Dateien übers Netzwerk verschieben (https://www.delphipraxis.net/121844-viele-grosse-dateien-uebers-netzwerk-verschieben.html)

Computerbabalulu 5. Okt 2008 22:44


Viele große Dateien übers Netzwerk verschieben
 
Hallo ihr lieben.

Ich habe folgendes Problem:

Ich muss (möchte) automatisiert viele große Dateien (1-4 GB pro Datei) zentral auf einen
Fileserver verschieben / holen. Die Dateien liegen verteilt auf ca. 15-20 Windows Systemen (XP) und müssen entweder vom Server eingesammelt oder von den XP Clients automatisch auf den Server übertragen werden. Da das ganze übers Netzwerk laufen soll, muss das ganze auch mit diversen Sicherheitsfunktionen ausgestattet sein, so das bei Störungen beispielsweise später automatisch angefangene Übertragungen fortgesetzt oder wiederholt werden. Außerdem muss sichergestellt werden, dass die Datei fehlerfrei verschoben wurde. Das ganze sollte natürlich möglichst performant sein, da hier am Tag etwa 1 bis 3 Tausend solcher Dateien zu verschieben sind. Die betreffenden Systeme sind alle mit 2-10 Gbit Netzwerk (2Gbit Clients, 10 Gbit Server) verbunden. FibreChanel, iSCSI bzw ein reines SAN kommt für uns aus Kostengründen nicht in betracht. Der Zielserver ist allerdings schon ganz nett mit 20 TB Volumen (Raid 10, 15K SAS Platten) und 2 10Gbit NICs. Der Server läuft übrigens mit Win2003.

Jetzt meine Frage. Wie realisiere ich das ganze?

Mach es Sinn mit die Dateien mit den Indys auf den Server zu schieben, oder besser die ganz normalen Win APIs zum verschieben verwenden? Hat vielleicht jemand Erfahrung mit solchen dingen oder gar schon mal etwas Ähnliches Programmiert?
Schön wären natürlich auch, wenn das Programm später die aktuelle Übertragungsgeschwindigkeit und den Fortschritt anzeigen würde. Und wie ist es überhaupt Sinnvoller: Dateien vom Server einsammeln lassen oder jeweils von den Clients auf den Server schreiben?

Für Vorschläge, Informationen und eventuelle Beispiele wäre ich dankbar.

Gruß

HalloDu 5. Okt 2008 22:52

Re: Viele große Dateien übers Netzwerk verschieben
 
Meine spontane Idee, deren Realisierbarkeit ich in keinster Weise versichern kann, wäre, einfach eine Freigabe auf dem Server (Domaincontroller?) zu machen, auf die nur ein bestimmter Nutzer zugreifen kann. Jetzt kommt der Part bei dem ich mir nicht sicher bin. Auf dieser Freigabe meldest du dich dann mittels deines Programms an / Könntest aber auch Alternativ den Ordner für Standardbenutzer weder einsehbar noch lesbar, sondern nur schreibbar machst und schiebst die Datei ganz normal rüber, und gibst eventuell noch nötige Rechte (?). Mit der Ordnerstruktur kannst du dann bestimmte Strukturen nachbilden oder noch nebenbei 'ne Datenbank pflegen. Den Sicherheitsaspekt hast du mit den Ordnerrechten und dem geschützen Ordner unter Kontrolle.

Computerbabalulu 5. Okt 2008 22:58

Re: Viele große Dateien übers Netzwerk verschieben
 
Hallo, HalloDu :-)

Das Problem mit der Sicherheit besteht keinenfalls insofern das die Dateien vor fremden Zugriff geschützt bleiben müssen.
Das ganze Netzwerk ist Firmenintern und alle Rechner sind mit Shares für alle Freigegeben.
Mit Sicherheit meinte ich nur die Sicherheit das die Dateien auch 100%ig zuverlässig fehlerfrei übertragen werden.
Daher frage ich mich wie ich das am besten realisiere. Sicher ist es kein Problem die Freigaben zu Mounten und
einfach mit der Win API die Dateien zu verschieben. Aber macht es auch Sinn es so zu machen?

Gruß

HalloDu 5. Okt 2008 23:00

Re: Viele große Dateien übers Netzwerk verschieben
 
Kennst du denn die Anzahl und die Struktur der Dateien, gibt es irgendwelche Regelmäßigkeiten? (Es könnten ja auch vlt einige Dateien garn nicht übertragen worden sein, dafür wären solche Informationen nützlich). Auf jeden Fall kannst du mit Hashes arbeiten um zu überprüfen, ob die Dateien wenigsten korrekt übertragen wurden.

Computerbabalulu 5. Okt 2008 23:02

Re: Viele große Dateien übers Netzwerk verschieben
 
Es hantelt sich bei den Dateien immer um den gleichen Dateityp (pdf Dateien).

HalloDu 5. Okt 2008 23:05

Re: Viele große Dateien übers Netzwerk verschieben
 
Ja wie gesagt, du kannst nach der Dateiübertragung prüfen, ob die Hashes übereinstimmen. Entweder einfach vom Client aus, oder dem Server noch auf welchem Wege auch immer den Hash übermitteln und einem Serverdienst das Validieren überlassen. Was ist wenn ein Client mal "vergisst" die Datei zu übertragen, kann man darauf irgendwie schließen.

littleDave 5. Okt 2008 23:11

Re: Viele große Dateien übers Netzwerk verschieben
 
Wie wäre es mit einer Art Torrent-System?

Der Client erstellt zuerst ein eine Art torrent-File für die zu übertragenen Dateien. Jede Datei wird in kleine Parts (sagen wir mal 10 MB) unterteilt (also nur im Container, nicht die Datei selbst) und jedes Part bekommt einen einzelnen Hash. Zusätzlich bekommt dann noch die komplette Datei einen Hash über alle Parts sowie über alle Daten.

Wenn du jetzt eine Datei an den Server schicken willst, sendest du zuerst die Container-Daten mit den Hashes und den Dateigrößen. Dieses Containerfile überprüfst du dann wiederum erstmal, in dem du einen Hash-Vergleich machst. Ist das Container-File in Ordnung, sendet der Server nacheinander Request an den Client, der dann die Daten der einzelnen Parts überträgt. Sobald ein Part ankommen ist und die CheckSumme des Parts beim Server mit der CheckSumme im Containerfile übereinstimmt, sendet der Server ein weiteren Request an den Clienten, bei dem er einen neuen, noch nicht vorhandenen Part anfragt.

Dies wiederholt der Server so lange, bis alle Parts herungergeladen und alle Checksummen übereinstimmen. Damit der Server die einzelnen Clients erkennt, könnten die sich ber UDP-Broadcast beim Server melden.

Das lästigste dabei wäre dabei die Erstellung des Container-Files, da dies bei 1-4 GB doch schon ein paar Minuten dauern kann. Jedoch bist du dann ziemlich sicher, ob irgendwelche Dateien fehlerhaft sind. Dann musst du nicht mehr die komplette Datei anfordnern sondern nur den Part, der eine falsche CheckSumme hat.

Das ganze kannst du noch besser machen, wenn mehrere identische Dateien von mehreren Clienten auf einmal gesendet werden. Dann kannst du verschiedene Parts von unterschiedlichen Clienten herunterladen - gleichzeitig bei einer Datei.

Ich hab sowas schon mal gemacht, hat ca. 1-2 Wochen gedauert und hat super funktioniert.

Computerbabalulu 5. Okt 2008 23:20

Re: Viele große Dateien übers Netzwerk verschieben
 
Hi littleDave,

das hört sich interessant an :roll:


Zitat:

Das lästigste dabei wäre dabei die Erstellung des Container-Files, da dies bei 1-4 GB doch schon ein paar Minuten dauern kann.
Das wäre eigentlich nicht soooo ein großes Problem. Die XP Clients haben alle 2 QuadCore Xeon CPUs und sollte das locker schaffen.

Hättest du vielleicht mal ein Beispiel von deiner Lösung für mich?

Da du ja alles schonmal gemacht hast und es sogar funktioniert wäre es blöd wenn ich hier das Rad neu erfinden müsste.


Oder vielleicht kenn ja wer ein Programm was ich nutzen kann welches es schon gibt??

Gruß

littleDave 5. Okt 2008 23:26

Re: Viele große Dateien übers Netzwerk verschieben
 
Ich kann mal schauen, jedoch heute nicht mehr. Wahrscheinlich komm ich morgen dazu - kann ich aber nicht garantieren.

Computerbabalulu 5. Okt 2008 23:27

Re: Viele große Dateien übers Netzwerk verschieben
 
Supi, vorab schnmal herzlichen Dank für deine Mühe!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:51 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz