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

17

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 auf eine andere übertragen. Ist es im Allgemeinen schneller, die Dateien einfach en masse zu kopieren, oder wäre es schneller, sie zu komprimieren (z. B. mit 7zip im schnellsten Modus) und eine oder mehrere große Dateien zu senden? Oder gibt es keinen Unterschied in der Praxis?

Kestes
quelle

Antworten:

37

Es ist schneller, eine einzelne große Datei anstatt vieler kleiner Dateien zu übertragen, da der Aufwand für die Aushandlung der Übertragung sehr hoch ist. Die Aushandlung erfolgt für jede Datei. Wenn Sie also eine einzelne Datei einmal übertragen, müssen Sie sie n Mal übertragen.

Sie sparen viel Zeit, wenn Sie vor der Überweisung zuerst eine Zip-Datei erstellen.

Jon Cahill
quelle
1
en.wikipedia.org/wiki/Slow-start bevorzugt auch große Dateien.
Commander Keen
4
Bedenken Sie, dass die Komprimierung auch einige Zeit in Anspruch nehmen wird. Wenn Ihre Daten nicht komprimiert werden können (z. B. JPEGs, ZIPs, JARs und andere bereits komprimierte Formate), sollten Sie sie nur TAREN (oder ZIP ohne Komprimierung). Dies spart CPU-Zeit für den sinnlosen Versuch, Ihre Daten weiter zu komprimieren.
Daniel Schneller
Diese vielen kleinen Dateien bereiten Ihnen große Schmerzen - zwischen winzigen Paketen und einem SMB-Handshake für jedes einzelne spart das Zippen wahrscheinlich gut 60% Ihrer Kopierzeit.
user2278
+1 für TAR, da Sie Teilarchiv kopieren / extrahieren können.
Cristian Vat
Diese Antwort ist richtig, aber unter Windows 7 gibt es (zumindest) einen bekannten Fehler, bei dem das Kopieren derselben Dateigruppe unter XP viel schneller ist als unter Windows 7: social.technet.microsoft.com/Forums/en-US/ w7itproperf / thread /…
tbone
5

Jon Cahill ist sehr korrekt, eine einzelne Datei wird schneller sein. Beachten Sie jedoch, dass einzelne Dateien (oder mittelgroße Gruppen in Zip-Dateien) bei Instabilität der Verbindung möglicherweise besser sind, da Sie bei fehlgeschlagener Übertragung von vorne beginnen müssen, während bei mehreren Dateien Dateien müssen Sie nur die zuletzt gestartete Datei erneut ausführen

Glenn Slaven
quelle
5
Es sei denn, das Übertragungsprotokoll wurde fortgesetzt.
Unkwntech
1

Das Schreiben vieler kleiner Dateien in das Dateisystem ist außerdem teurer als das Schreiben einer einzelnen großen Datei. Es muss Dinge tun wie:

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

Je mehr Dateien sich in einem Verzeichnis befinden, desto teurer kann dies werden. Und jeder dieser Schritte kann den Kopiervorgang verzögern und das Ganze verlangsamen.

Luke Quinane
quelle
1
Ich vermute, er wird immer noch alle kleinen Dateien im Zielsystem benötigen, daher muss er wahrscheinlich die Zip-Datei später extrahieren, dh das Dateisystem muss immer noch die Arbeit erledigen. Das Senden der großen Datei und das Entpacken sind jedoch immer noch viel schneller als das Übertragen aller kleinen Dateien über das Internet.
BlaM
@BlaM, wie ich in der Antwort gesagt habe, hängt alles von der Latenz ab. Wenn jeder CreateFile-Operation eine Netzwerklatenz hinzugefügt wird, kann die Gesamtzeit erheblich länger sein. Wenn die Kopie intelligent genug ist, um gleichzeitig Dateien zu erstellen, hat dies möglicherweise keine Auswirkungen auf den Vorgang.
Luke Quinane
0

Die durchschnittliche Paketgröße im Verhältnis zur durchschnittlichen Dateigröße ist hier wahrscheinlich entscheidend. Bei vielen kleinen Dateien werden möglicherweise viele kleine Pakete verschickt. Winzige Pakete verursachen immer noch TCP-Overhead. Sie könnten dadurch den Datenverkehr verdoppeln.

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

Jldugger
quelle
0

Genau das, was ich gefunden habe, aber wenn Sie eine schnellere Übertragung möchten, starten Sie die Übertragung vom lokalen Computer und kopieren Sie sie auf das lokale Laufwerk.

Dh kopiere \ computer1 \ myshare nach c: \ files \ myshare, verwende keinen dritten Computer und kopiere von \ computer1 \ myshare nach \ computer2 \ mynewshare.

Wannen
quelle
0

Beachten Sie auch, dass sich die Auswahl des Protokolls auf die Gesamtzeit auswirkt. Beispielsweise kann das Übertragen von FTP-Dateien von einem Host auf einen anderen deutlich schneller sein als die Verwendung der Windows-Dateifreigabe (dies gilt natürlich auch für Domänenberechtigungen und dergleichen) verloren, aber in manchen Situationen kann dies ein akzeptabler Kompromiss sein.

Rowland Shaw
quelle