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

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

6 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам