web-dev-qa-db-ja.com

どちらが高速で、なぜですか:いくつかの小さなファイルを転送するか、いくつかの大きなファイルを転送するのですか?

私はすぐに数千のファイルを含むフォルダを作成します。各ファイルは数KBのオーダーです。これらを1つのUNC共有から別のUNC共有にWindowsネットワーク経由で転送する必要があります。一般的に、ファイルをまとめてコピーする方が速いですか、それともZip圧縮(たとえば、最速モードで7Zipを使用)して1つまたはいくつかの大きなファイルを送信する方が速いですか?または実際に違いはありませんか?

17
kestes

転送をネゴシエートするオーバーヘッドがあるため、小さなファイルをたくさん使うよりも、1つの大きなファイルを転送する方が高速です。ネゴシエーションはファイルごとに行われるため、1つのファイルを転送する場合は1回実行する必要があります。n個のファイルを転送する場合は、n回実行する必要があります。

転送前に最初にZipを実行すると、時間を大幅に節約できます。

37
Jon Cahill

Jon Cahillは正解です。単一のファイルの方が高速です。ただし、接続が不安定な場合は、個々のファイル(またはZipファイルの中サイズのグループ)の方が良い場合があります。転送が失敗した場合は、最初からやり直す必要があるためです。最後に開始したファイルをやり直す必要があるファイル

5
Glenn Slaven

小さなファイルがたくさんあると、単一の大きなファイルよりもファイルシステムに書き込むのにコストがかかります。それは次のようなことをする必要があります:

  • ファイル名が一意であることを確認してください
  • ファイルテーブルエントリを書き出す

ディレクトリでファイルを取得するにつれて、かなりのコストがかかる可能性があります。そして、これらの各ステップは、コピープロセスにレイテンシを追加し、全体の速度を低下させる可能性があります。

1
Luke Quinane

ここでは、平均ファイルサイズに対する平均パケットサイズがおそらく重要です。小さなファイルがたくさんあると、小さなパケットがたくさん送信されることがあります。小さなパケットは依然として発生しますTCPオーバーヘッド;結果として、トラフィック量が2倍になる可能性があります。

現代のシステムや比較的古いシステムでも、単一のTCP接続で複数のファイルを送信できるため、ハンドシェイクのコストを回避できます。

0
jldugger

私が見つけたものだけですが、より高速な転送が必要な場合は、ローカルコンピューターから転送を開始し、ローカルドライブにコピーします。

つまり、\ computer1\myshareをc:\ files\myshareにコピーします。3番目のコンピューターは使用せず、\ computer1\myshareから\ computer2\mynewshareにコピーします。

0
Tubs

プロトコルの選択が完了するまでの全体的な時間に影響することも覚えておく価値があります。たとえば、あるホストから別のホストへのFTPファイルの送信は、Windowsファイル共有を使用するよりも著しく高速です(もちろん、ドメインのアクセス許可なども同様です)失われましたが、状況によっては、これは許容できるトレードオフである可能性があります-結局、これらは圧縮/解凍によっても失われるでしょう)

0
Rowland Shaw