0

次の状況があるとしましょう: ネットワークで接続された 2 台のコンピューター、小さな (または異なるサイズの) ファイルでいっぱいのディレクトリ (フラット) をネットワーク経由で移動する必要があるとします。どちらが速いですか: 1) ディレクトリをネットワーク経由で直接移動するか、2) zip (または他のアルゴリズムで圧縮) し、zip ファイルを移動し、それを解凍しますか?

私の経験からすると、2番目のようですが、どうすればそれが正しいとわかりますか?

これはそれほど単純ではないことは理解しています - はい、そうでなくても、帯域幅、zip アルゴリズム、ファイル サイズ、平均圧縮率などのプレーヤーがありますが、私が知らないコンピューター サイエンスがあるのではないかと思います。

4

2 に答える 2

1

どのようなシステムを使用しているかは明らかにされていません。最良の方法は、両方を行うことです。圧縮されたアーカイブをネットワーク経由で送信し、圧縮されたアーカイブ全体がどちらの側にも保存されることなく、反対側で解凍します。Unix システムでは、これは通常、圧縮のために gzip を呼び出す tar で行われます。パイプに直接 tar し、もう一方の端で untar することができます。リンク上で同様に圧縮する rsync を使用することもできますが、より洗練されており、既に宛先にあるデータの送信を回避します。

于 2012-11-15T00:18:03.990 に答える
0

より良い方法は、複数のファイルを単一のアーカイブに圧縮することだと思います。

たとえば、最新の 3D ゲームでは、多くのゲーム リソース ファイルがより大きなアーカイブに圧縮され、ゲームの実行中にメモリに直接解凍されます。これにより、ゲームの読み込みが大幅に減少します。

長所:

1) ディレクトリ インデックスを何度も再読み込みする必要はありません。ディレクトリ インデックスは一度だけ読み込まれます。

2) 複数の fopen を作成する必要はありません

3) データの圧縮 - 最新のプロセッサ (10 年以内:) を使用する場合) ハードディスクからの読み取りは、解凍プロセスよりもはるかに遅くなります (SSD ディスクの場合はわかりません)。

4) ハードディスクを使用する場合、単一の (断片化されていても) 大きなファイルの読み取りは、ディスクのさまざまな場所にある多くの小さなファイルよりもはるかに高速です。複数のファイルを読み取る場合、ハードディスクはヘッドを位置決めする必要があるため、読み取り速度が低下します。

5) たとえば FTP を使用して複数のファイルを転送する場合、ファイルごとに STOR コマンドを作成する必要がありますが、アーカイブを転送する場合、必要な STOR コマンドは 1 つだけです。

于 2012-11-14T15:12:39.103 に答える