Frage Was ist schneller und warum: mehrere kleine Dateien oder wenige große Dateien übertragen?


Ich werde bald einen Ordner mit Tausenden von Dateien haben, jede Datei in der Größenordnung von ein paar KB. Ich muss diese über ein Windows-Netzwerk von einer UNC-Freigabe zur anderen übertragen. Im Allgemeinen ist es schneller, die Dateien einfach über die Massen zu kopieren, oder wäre es schneller, sie zu komprimieren (z. B. 7zip im schnellsten Modus zu verwenden) und eine oder einige große Dateien zu senden? Oder gibt es keinen Unterschied in der Praxis?


16
2018-05-19 04:17


Ursprung




Antworten:


Es ist schneller, eine einzelne große Datei anstelle von vielen kleinen Dateien zu übertragen, da der Overhead der Übertragung ausgehandelt wird. Die Aushandlung erfolgt für jede Datei, so dass die Übertragung einer einzelnen Datei einmal durchgeführt werden muss, die Übertragung von n Dateien bedeutet, dass sie n-mal durchgeführt werden muss.

Sie sparen sich viel Zeit, wenn Sie vor dem Transfer zuerst zippen.


36
2018-05-19 04:27



en.wikipedia.org/wiki/Slow-start bevorzugt auch große Dateien. - Commander Keen
Bedenken Sie, dass die Komprimierung auch Zeit braucht. Wenn Ihre Daten nicht komprimiert werden können (z. B. JPEGs, ZIPs, JARs und andere bereits komprimierte Formate), sollten Sie sie nur TAR (oder ZIP ohne Komprimierung). Das spart CPU-Zeit für den sinnlosen Versuch, Ihre Daten weiter zu komprimieren. - Daniel Schneller
Diese vielen kleinen Dateien werden Ihnen viel Schmerz bereiten - zwischen winzigen Paketen und einem SMB-Handshake für jeden einzelnen, wird das Zippen wahrscheinlich 60% Ihrer Kopierzeit einsparen. - user2278
+1 für TAR, da Sie ein Teilarchiv kopieren / extrahieren können. - Cristian Vat
Diese Antwort ist korrekt, aber unter Windows 7 (zumindest) gibt es einen bekannten Fehler, bei dem das Kopieren genau der gleichen Dateien auf XP ist viel schneller als unter Windows 7: social.technet.microsoft.com/Forums/de-DE/w7itprofund/thread/... - tbone


Jon Cahill ist sehr korrekt, eine einzelne Datei wird schneller sein. Es sollte jedoch beachtet werden, dass einzelne Dateien (oder mittelgroße Gruppen in Zip-Dateien) besser sein können, wenn die Verbindung instabil ist, da bei fehlgeschlagener Übertragung die Datei von vorn beginnen muss, während es sich bei mehreren um eine neue handelt Dateien müssen Sie nur die letzte Datei neu starten


5
2018-05-19 06:31



Es sei denn, das Übertragungsprotokoll wurde fortgesetzt. - Unkwntech


Viele kleine Dateien sind auch teurer in das Dateisystem zu schreiben als eine einzelne große Datei. Es muss Dinge tun wie:

  • Überprüfen Sie, dass der Dateiname eindeutig ist
  • Schreiben Sie den Dateitabelleneintrag aus

Wenn Sie mehr und mehr Dateien in einem Verzeichnis erhalten, kann dies sehr teuer werden. Und jeder dieser Schritte kann dem Kopierprozess Latenz hinzufügen und das Ganze verlangsamen.


1
2018-05-19 05:57



Ich schätze, er wird immer noch alle kleinen Dateien im Zielsystem brauchen, also wird er wahrscheinlich später die ZIP extrahieren müssen, d. H. Das Dateisystem muss die Arbeit noch erledigen. Das Senden der großen Datei und das Entpacken ist jedoch immer noch viel schneller als das Übertragen aller kleinen Dateien über das Netzwerk. - BlaM
@BlaM, wie ich in der Antwort gesagt habe, kommt es auf Latenzzeit an. Wenn die Netzwerklatenz bei jeder CreateFile-Operation hinzugefügt wird, kann die Gesamtzeit viel länger sein. Wenn die Kopie intelligent genug ist, um gleichzeitig Dateien zu erstellen, hat dies möglicherweise keinen Einfluss auf die Operation. - Luke Quinane


Die durchschnittliche Paketgröße relativ zur durchschnittlichen Dateigröße ist hier wahrscheinlich kritisch. Bei vielen kleinen Dateien können Sie viele kleine Pakete aussenden. Winzige Pakete verursachen immer noch einen TCP-Overhead; Sie könnten die Verkehrsdichte verdoppeln.

Moderne Systeme und sogar relativ alte können mehrere Dateien über eine einzige TCP-Verbindung senden, wodurch die Kosten dieses Handshakes vermieden werden.


0
2018-05-19 05:12





Genau das, was ich gefunden habe, aber wenn Sie eine schnellere Übertragung wünschen, initiieren Sie die Übertragung vom lokalen Computer und kopieren Sie auf das lokale Laufwerk.

Kopieren Sie \ computer1 \ myshare nach c: \ files \ myshare, verwenden Sie keinen dritten Computer und kopieren Sie von \ computer1 \ myshare nach \ computer2 \ mynewshare.


0
2018-05-19 07:12





Es ist auch wichtig, daran zu denken, dass die Wahl des Protokolls die Gesamtzeit beeinflusst - zum Beispiel für FTP-Dateien von einem Host zu einem anderen, kann deutlich schneller sein als die Windows-Dateifreigabe (natürlich sind auch Domain-Berechtigungen und ähnliches) verloren, aber in einigen Situationen kann dies ein akzeptabler Kompromiss sein - schließlich würden diese auch beim Zippen / Entpacken verloren gehen)


0
2018-05-19 12:11