O que é mais rápido e por quê: transferir vários arquivos pequenos ou poucos arquivos grandes?

17

Em breve terei uma pasta com milhares de arquivos, cada arquivo na ordem de alguns KB. Vou precisar transferi-los pela rede Windows de um compartilhamento UNC para outro. Em geral, é mais rápido copiar os arquivos em massa ou seria mais rápido compactá-los (por exemplo, usando 7zip no modo mais rápido) e enviar um ou alguns arquivos grandes? Ou não há diferença na prática?

kestes
fonte

Respostas:

37

É mais rápido transferir um único arquivo grande em vez de muitos pequenos arquivos, devido à sobrecarga de negociar a transferência. A negociação é feita para cada arquivo; portanto, a transferência de um único arquivo precisa ser feita uma vez; a transferência de n arquivos significa que deve ser feita n vezes.

Você economizará muito tempo se fechar primeiro antes da transferência.

Jon Cahill
fonte
1
O en.wikipedia.org/wiki/Slow-start também favorece arquivos grandes.
Comandante Keen
4
Considere que a compactação também levará tempo. Se seus dados não puderem ser compactados (por exemplo, JPEGs, ZIPs, JARs e outros formatos já compactados), você deve apenas tar-los (ou ZIP sem compactação). Isso economizará tempo da CPU para a tentativa inútil de compactar ainda mais seus dados.
Daniel Schneller #
Como muitos arquivos pequenos causam muita dor - entre pacotes minúsculos e um aperto de mão SMB para cada um deles, o zíper provavelmente poupará 60% do tempo de cópia.
User2278 19/05/09
+1 para o TAR, pois você pode copiar / extrair arquivo parcial.
Cristian Vat
Esta resposta está correta, mas no Windows 7 (pelo menos) há um bug conhecido em que copiar exatamente o mesmo conjunto de arquivos no XP é muito mais rápido do que no Windows 7: social.technet.microsoft.com/Forums/en-US/ w7itproperf / thread /…
tbone
5

Jon Cahill está muito correto, um único arquivo será mais rápido. No entanto, vale lembrar que, se houver alguma instabilidade na conexão, os arquivos individuais (ou grupos de tamanho médio nos arquivos zip) podem ser melhores, porque se a transferência falhar, você terá que começar tudo de novo, enquanto que com vários arquivos, você precisará refazer o último arquivo iniciado

Glenn Slaven
fonte
5
A menos que o protocolo de transferência seja retomado.
Unkwntech
1

Muitos arquivos pequenos também serão mais caros para gravar no sistema de arquivos do que um único arquivo grande. Ele precisa fazer coisas como:

  • Verifique se o nome do arquivo é exclusivo
  • Escreva a entrada da tabela de arquivos

À medida que você obtém mais e mais arquivos em um diretório, isso pode se tornar bastante caro. E cada uma dessas etapas pode adicionar latência ao processo de cópia e tornar a coisa mais lenta.

Luke Quinane
fonte
1
Eu acho que ele ainda precisará de todos os arquivos pequenos no sistema de destino, então ele provavelmente precisará extrair o zip mais tarde, ou seja, o sistema de arquivos ainda precisará fazer o trabalho. Enviar o arquivo grande e descompactar ainda será muito mais rápido do que transferir todos os arquivos pequenos pela rede.
BlaM
@ BlaM, como eu disse na resposta, tudo se resume à latência. Se a latência da rede for adicionada a cada operação CreateFile, o tempo total poderá ser muito maior. Se a cópia for inteligente o suficiente para criar arquivos simultaneamente, talvez não tenha impacto na operação.
21415 Luke Quinane
0

O tamanho médio do pacote em relação ao tamanho médio do arquivo é provavelmente crítico aqui. Com muitos arquivos pequenos, você pode estar enviando muitos pacotes minúsculos. Pequenos pacotes ainda incorrem em sobrecarga de TCP; como resultado, você pode dobrar a quantidade de tráfego.

Sistemas modernos e até relativamente antigos podem enviar vários arquivos por uma única conexão TCP, evitando os custos desse handshake.

jldugger
fonte
0

Exatamente o que encontrei, mas se você quiser uma transferência mais rápida, inicie a transferência no computador local e copie para a unidade local.

Ou seja, copie \ computer1 \ myshare para c: \ files \ myshare, não use um terceiro computador e copie de \ computer1 \ myshare para \ computer2 \ mynewshare.

Banheiras
fonte
0

Também vale lembrar que a escolha do protocolo afeta o tempo total para a conclusão - por exemplo, para arquivos FTP de um host para outro, pode ser notavelmente mais rápida do que o compartilhamento de arquivos do Windows (é claro, coisas como permissões de domínio e similares também são perdida, mas em algumas situações, isso pode ser uma troca aceitável - afinal, elas também seriam perdidas ao fechar / descompactar)

Rowland Shaw
fonte