1 つの大きなアーカイブに圧縮すると、フォルダーを個別に圧縮するよりも圧縮率が向上しますか?

1 つの大きなアーカイブに圧縮すると、フォルダーを個別に圧縮するよりも圧縮率が向上しますか?

約 8 GB 程度のフォルダーがいくつかあります。これらのフォルダーを合わせると、データの合計は約 60 GB になります。これらのフォルダーを圧縮するには、2 つの方法があります。1 つは個別に圧縮アーカイブを作成し、もう 1 つはまとめて 1 つの大きな圧縮アーカイブを作成することです。

一般的に言えば、圧縮するデータがすべて同じタイプであり、使用する圧縮アルゴリズムも同じであると仮定すると (また、大きなファイルの解凍にかかる時間も気にしない)、どちらの方法の方が他の方法よりも圧縮率が高くなるのでしょうか、それとも 2 つのシナリオで圧縮されたファイルの合計サイズは同じになる傾向があるのでしょうか。

答え1

1 つの大きなアーカイブに圧縮すると、フォルダーを個別に圧縮するよりも圧縮率が向上しますか?必ずしも。

アーカイブが使用している場合のみ固体圧縮非ソリッド アーカイブ (Zip アーカイブなど) は、ファイルを個別に圧縮します。これにより、アーカイブから個々のファイルを簡単に解凍できます。また、すべてを再圧縮せずにアーカイブにファイルを追加することもできます。

ソリッド アーカイブの場合、これはすべて非常に困難です。ストリームの最後でファイルを解凍するには、すべてを解凍する必要があります (ただし、必ずしもディスクに書き込まれるわけではありません)。ファイルを追加する場合も、アルゴリズムはすべてを調べる必要があります。

ただし、中間的な方法があります。「ソリッド ブロック」を使用する方法です。アーカイバは、常にファイル全体を処理する必要はなく、ファイルの一部だけを処理することになります。

7-Zip GUI では、このオプションです:

7-Zip 追加ダイアログ

圧縮されるデータを考慮に入れなければ、実に簡単です。

  • 非ソリッド: 高速なインタラクティブ アクセス、最悪の圧縮
  • ソリッドブロック: インタラクティブアクセスがやや効率的、圧縮が向上
  • 堅牢: インタラクティブなアクセスなし、最高の圧縮

予測されるアクセス パターンに応じて、適切なバリアントを選択する必要があります。

答え2

絶対的な確実性をもって言うことは不可能ですが、より多くのデータ ブロックが繰り返しとして見つかるため、1 つの大きなアーカイブは理論的にはアーカイブ サイズを小さくするはずです。これは、データがおっしゃるとおり均質化されていると仮定した場合です。

ただし、特定のフォルダーに類似したデータ ブロックがより多く含まれるファイルが含まれている可能性があり、その場合は個別のアーカイブとして圧縮した方がよい場合があります。

どちらの方法が最善であるかを知る唯一の真の方法は、両方の方法をテストすることです。

答え3

単一のアーカイブはほとんどの場合小さくなりますが、その理由はあなたが考えているものとは異なります。

簡単に言えば、アーカイブを 1 つだけにすることで、複数のアーカイブ ファイル ヘッダーでスペースを無駄にすることがなくなります。アーカイブ ファイルが有効なアーカイブであるために占める最小限のスペースがあり、作成するアーカイブごとにその分のスペースが占められることになります。これに対して広く使用されている唯一の例外はcpio、アーカイブ自体のヘッダーがなく、ファイルごとのヘッダーのみを持つ形式です。

もっと現実的に言えば、いつもの複数のアーカイブではなく1つのアーカイブのみを使用しても、少なくとも同じ圧縮率が得られます。また、一部のアーカイバでは大幅に改善されることもあります(たとえば、zpaq重複排除は内でアーカイブなので、重複したデータが大量にある場合は多くのスペースを節約できます。

ただし、これを決定する前に、もう 1 つ質問する必要があります。複数の小さなアーカイブではなく 1 つの大きなアーカイブを処理するオーバーヘッドは、スペースの節約に見合う価値があるでしょうか。データを保存する場所によっては、特に一度に 1 つのフォルダーのみが必要になる場合は、小さなアーカイブを使用する方が経済的な場合があります。

しかし全体的には、Keltari は正しいです。確実に知る唯一の方法は、それをテストすることです。

関連情報