Что быстрее и почему: передача нескольких маленьких файлов или нескольких больших файлов?

17

Скоро у меня будет папка с тысячами файлов, каждый файл порядка нескольких КБ. Мне нужно будет перенести их через сеть Windows с одного общего ресурса UNC на другой. В целом, быстрее ли просто скопировать файлы в массовом порядке, или быстрее будет сжать их (например, используя 7zip в самом быстром режиме) и отправить один или несколько больших файлов? Или нет разницы на практике?

kestes
источник

Ответы:

37

Передача одного большого файла быстрее, чем большого количества маленьких файлов, из-за накладных расходов, связанных с согласованием передачи. Согласование выполняется для каждого файла, поэтому для передачи одного файла его нужно выполнить один раз, для передачи n файлов это необходимо сделать n раз.

Вы сэкономите много времени, если перед передачей прыгнете первым.

Джон Кэхилл
источник
1
en.wikipedia.org/wiki/Slow-start также поддерживает большие файлы.
Командир Кин
4
Учтите, что сжатие тоже займет время. Если ваши данные не могут быть сжаты (например, JPEG, ZIP, JAR и другие уже сжатые форматы), вы должны только TAR их (или ZIP без сжатия). Это сэкономит процессорное время для бессмысленной попытки дальнейшего сжатия ваших данных.
Даниэль Шнеллер
Такое большое количество маленьких файлов доставит вам много боли - между крошечными пакетами и выполнением SMB-рукопожатия для каждого из них, архивирование, вероятно, сэкономит на 60% меньше времени на копирование.
user2278
+1 за TAR, так как вы можете скопировать / извлечь частичный архив.
Кристиан Ват
Этот ответ верен, но в Windows 7 (по крайней мере) есть известная ошибка, при которой копирование точно такого же набора файлов в XP происходит намного быстрее, чем в Windows 7: social.technet.microsoft.com/Forums/en-US/ w7itproperf / thread /…
tbone
5

Джон Кэхилл очень прав, один файл будет быстрее. Однако стоит помнить, что если в соединении есть нестабильность, отдельные файлы (или группы среднего размера в zip-файлах) могут быть лучше, потому что, если передача не удалась, вам придется начинать все сначала, тогда как с несколькими файлы, которые вам просто нужно будет повторно сделать последний запущенный файл

Гленн Славен
источник
5
Если протокол передачи не имеет резюме.
Unkwntech
1

Множество маленьких файлов также будет дороже записать в файловую систему, чем один большой файл. Это должно делать такие вещи, как:

  • Проверьте имя файла уникальным
  • Запишите запись в файл таблицы

Поскольку вы получаете все больше и больше файлов в каталоге, это может стать довольно дорогостоящим. И каждый из этих шагов может добавить задержку к процессу копирования и замедлить все это.

Люк Куинан
источник
1
Я предполагаю, что ему все еще понадобятся все небольшие файлы в целевой системе, поэтому ему, вероятно, придется извлечь zip позже, то есть файловая система все равно должна будет выполнить эту работу. Однако отправка большого файла и разархивирование будет намного быстрее, чем передача всех маленьких файлов по сети.
BlaM
@BlaM, как я уже сказал в ответе, все сводится к задержке. Если сетевая задержка добавляется к каждой операции CreateFile, общее время может быть намного больше. Если копия достаточно умна, чтобы одновременно создавать файлы, возможно, это не повлияет на операцию.
Люк Куинэйн
0

Средний размер пакета по сравнению со средним размером файла, вероятно, является здесь критическим. С большим количеством маленьких файлов вы можете посылать много маленьких пакетов. Крошечные пакеты все еще несут издержки TCP; в результате вы можете удвоить количество трафика.

Современные и даже относительно древние системы могут отправлять несколько файлов по одному TCP-соединению, избегая затрат на это рукопожатие.

jldugger
источник
0

Как раз то, что я нашел, но если вы хотите более быструю передачу, инициируйте передачу с локального компьютера и скопируйте на локальный диск.

Т.е. скопируйте \ computer1 \ myshare в c: \ files \ myshare, не используйте третий компьютер и скопируйте из \ computer1 \ myshare в \ computer2 \ mynewshare.

Баки
источник
0

Также стоит помнить, что выбор протокола влияет на общее время завершения - например, передача файлов FTP с одного хоста на другой может быть заметно быстрее, чем при использовании общего доступа к файлам Windows (конечно, такие вещи, как разрешения домена и тому подобное, также потеряно, но в некоторых ситуациях это может быть приемлемым компромиссом - в конце концов, они также будут потеряны при архивировании / разархивировании)

Роуланд Шоу
источник