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


17

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

Ответы:


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-соединению, избегая затрат на это рукопожатие.


0

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

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.