Quale è più veloce e perché: trasferire diversi file piccoli o pochi file di grandi dimensioni?


17

Presto avrò una cartella con migliaia di file, ogni file nell'ordine di pochi KB. Dovrò trasferirli su una rete Windows da una condivisione UNC a un'altra. In generale, è più veloce semplicemente copiare i file in massa o sarebbe più veloce comprimerli (ad esempio, utilizzando 7zip in modalità più veloce) e inviare uno o alcuni file di grandi dimensioni? O non c'è differenza nella pratica?

Risposte:


37

È più veloce trasferire un singolo file di grandi dimensioni anziché molti piccoli file a causa del sovraccarico di negoziazione del trasferimento. La negoziazione viene eseguita per ogni file, quindi il trasferimento di un singolo file deve essere eseguito una volta, il trasferimento di n file significa che deve essere eseguito n volte.

Ti risparmierai molto tempo se esegui la zip prima del trasferimento.


1
en.wikipedia.org/wiki/Slow-start favorisce anche file di grandi dimensioni.
Comandante Keen,

4
Considera che anche la compressione richiederà tempo. Se i tuoi dati non possono essere compressi (ad esempio JPEG, ZIP, JAR e altri formati già compressi), dovresti solo TAR (o ZIP senza compressione). Ciò farà risparmiare tempo alla CPU per il tentativo inutile di comprimere ulteriormente i dati.
Daniel Schneller,

Il fatto che molti piccoli file ti causino molto dolore: tra piccoli pacchetti e facendo una stretta di mano SMB per ognuno, zippare probabilmente ti farà risparmiare un buon 60% sul tuo tempo di copia.
user2278

+1 per TAR poiché è possibile copiare / estrarre l'archivio parziale.
Cristian Vat,

Questa risposta è corretta, ma su Windows 7 (almeno) esiste un bug noto in cui la copia dello stesso identico set di file su XP è molto più veloce rispetto a Windows 7: social.technet.microsoft.com/Forums/en-US/ w7itproperf / thread /…
tbone

5

Jon Cahill ha ragione, un singolo file sarà più veloce. Tuttavia, vale la pena ricordare che se c'è instabilità nella connessione, i singoli file (o gruppi di medie dimensioni nei file zip) potrebbero essere migliori, perché se il trasferimento fallisce dovrai ricominciare tutto da capo, mentre con più i file dovrete semplicemente rifare l'ultimo file avviato


5
A meno che il protocollo di trasferimento non sia stato ripreso.
Unkwntech,

1

Molti piccoli file saranno anche più costosi da scrivere nel file system rispetto a un singolo file di grandi dimensioni. Deve fare cose come:

  • Verifica che il nome del file sia univoco
  • Scrivi la voce della tabella dei file

Man mano che si ottengono sempre più file in una directory, questo può diventare piuttosto costoso. E ciascuno di questi passaggi può aggiungere latenza al processo di copia e rallentare il tutto.


1
Immagino che avrà ancora bisogno di tutti i piccoli file nel sistema di destinazione, quindi probabilmente dovrà estrarre lo zip in seguito, cioè il filesystem dovrà ancora fare il lavoro. Tuttavia, l'invio di file di grandi dimensioni e la decompressione sarà comunque molto più rapido rispetto al trasferimento di tutti i file di piccole dimensioni su rete.
BlaM,

@BlaM, come ho detto nella risposta, tutto si riduce alla latenza. Se la latenza di rete viene aggiunta a ciascuna operazione CreateFile, il tempo totale potrebbe essere molto più lungo. Se la copia è abbastanza intelligente da creare contemporaneamente file, forse non influirebbe sull'operazione.
Luke Quinane,

0

La dimensione media del pacchetto rispetto alla dimensione media del file è probabilmente critica qui. Con molti file di piccole dimensioni potresti trovarti a inviare molti piccoli pacchetti. Piccoli pacchetti comportano ancora un sovraccarico TCP; potresti finire raddoppiando la quantità di traffico di conseguenza.

I sistemi moderni e anche quelli relativamente antichi possono inviare più file su una singola connessione TCP, evitando i costi di quella stretta di mano.


0

Proprio quello che ho trovato, ma se si desidera un trasferimento più veloce avviare il trasferimento dal computer locale e copiarlo sull'unità locale.

Vale a dire \ computer1 \ myshare in c: \ files \ myshare, non usare un terzo computer e copia da \ computer1 \ myshare a \ computer2 \ mynewshare.


0

Vale anche la pena ricordare che la scelta del protocollo influisce sul tempo complessivo di completamento: ad esempio, i file FTP da un host a un altro, possono essere notevolmente più veloci rispetto all'utilizzo della condivisione di file di Windows (ovviamente, cose come le autorizzazioni di dominio e simili sono anche perso, ma in alcune situazioni, questo può essere un compromesso accettabile - Dopotutto, questi potrebbero anche essere persi zippando / decomprimendo)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.