¿Cuál es más rápido y por qué: transferir varios archivos pequeños o pocos archivos grandes?

17

Pronto tendré una carpeta con miles de archivos, cada archivo del orden de unos pocos KB. Tendré que transferirlos a través de una red de Windows de un recurso compartido de UNC a otro. En general, ¿es más rápido simplemente copiar los archivos en masa, o sería más rápido comprimirlos (por ejemplo, usando 7zip en el modo más rápido) y enviar uno o algunos archivos grandes? ¿O no hay diferencia en la práctica?

kestes
fuente

Respuestas:

37

Es más rápido transferir un solo archivo grande en lugar de muchos archivos pequeños debido a la sobrecarga de negociar la transferencia. La negociación se realiza para cada archivo, por lo que transferir un solo archivo debe hacerse una vez, transferir n archivos significa que debe hacerse n veces.

Se ahorrará mucho tiempo si comprime primero antes de la transferencia.

Jon Cahill
fuente
1
en.wikipedia.org/wiki/Slow-start también favorece los archivos grandes.
Comandante Keen
44
Considere que la compresión también llevará tiempo. Si sus datos no pueden comprimirse (p. Ej., JPEG, ZIP, JAR y otros formatos ya comprimidos), solo debe TAR (o ZIP sin compresión). Esto ahorrará tiempo de CPU para el intento inútil de comprimir aún más sus datos.
Daniel Schneller
Que tantos archivos pequeños le causen mucho dolor: entre pequeños paquetes y hacer un apretón de manos SMB para cada uno, la compresión probablemente reducirá un 60% de su tiempo de copia.
user2278
+1 para TAR ya que puede copiar / extraer archivos parciales.
Cristian Vat
Esta respuesta es correcta, pero en Windows 7 (al menos) hay un error conocido en el que copiar exactamente el mismo conjunto de archivos en XP es mucho más rápido que en Windows 7: social.technet.microsoft.com/Forums/en-US/ w7itproperf / thread / ...
tbone
5

Jon Cahill es muy correcto, un solo archivo será más rápido. Sin embargo, vale la pena tener en cuenta que si hay alguna inestabilidad en la conexión, los archivos individuales (o grupos medianos en archivos zip) pueden ser mejores, porque si la transferencia falla, tendrá que comenzar de nuevo, mientras que con múltiples archivos, solo tendrá que volver a hacer el último archivo iniciado

Glenn Slaven
fuente
55
A menos que el protocolo de transferencia se haya reanudado.
Unkwntech
1

Muchos archivos pequeños también serán más caros de escribir en el sistema de archivos que un solo archivo grande. Necesita hacer cosas como:

  • Verifique que el nombre del archivo sea único
  • Escriba la entrada de la tabla de archivos

A medida que obtiene más y más archivos en un directorio, esto puede ser bastante costoso. Y cada uno de estos pasos puede agregar latencia al proceso de copia y ralentizar todo.

Luke Quinane
fuente
1
Supongo que todavía necesitará todos los archivos pequeños en el sistema de destino, por lo que probablemente tendrá que extraer el archivo comprimido más adelante, es decir, el sistema de archivos aún tendrá que hacer el trabajo. Sin embargo, enviar el archivo grande y descomprimirlo será mucho más rápido que transferir todos los archivos pequeños a través de la red.
BlaM
@BlaM, como dije en la respuesta, todo se reduce a la latencia. Si se agrega latencia de red a cada operación CreateFile, el tiempo total podría ser mucho más largo. Si la copia es lo suficientemente inteligente como para crear archivos simultáneamente, tal vez no afectaría la operación.
Luke Quinane
0

El tamaño promedio de paquete relativo al tamaño promedio de archivo es probablemente crítico aquí. Con muchos archivos pequeños, es posible que envíe muchos paquetes pequeños. Los pequeños paquetes aún incurren en gastos generales TCP; podría terminar duplicando la cantidad de tráfico como resultado.

Los sistemas modernos e incluso los relativamente antiguos pueden enviar múltiples archivos a través de una única conexión TCP, evitando los costos de ese apretón de manos.

jldugger
fuente
0

Justo lo que he encontrado, pero si desea una transferencia más rápida, inicie la transferencia desde la computadora local y cópiela en la unidad local.

Es decir, copie \ computer1 \ myshare a c: \ files \ myshare, no use una tercera computadora y copie de \ computer1 \ myshare a \ computer2 \ mynewshare.

Bañeras
fuente
0

También vale la pena recordar que la elección del protocolo afecta el tiempo total para completar, por ejemplo, los archivos FTP de un host a otro pueden ser notablemente más rápidos que usar el uso compartido de archivos de Windows (por supuesto, los permisos de dominio y similares también perdido, pero en algunas situaciones, esto puede ser un intercambio aceptable: después de todo, también se perderían al comprimir / descomprimir)

Rowland Shaw
fuente