最近、期限切れになりそうな大学のホームディレクトリを、tarストリームとして送信し、自分の側で圧縮することでバックアップしましたssh user@host "tar cf - my_dir/" | bzip2 > uni_backup.tar.bz2
。
これは私に考えさせられました:私は圧縮がどのように機能するかの基本を知っているだけですが、アルゴリズムがデータのブロックの処理をある時点で終了する必要があるため、データのストリームを圧縮するこの機能は圧縮率の低下につながると思います、これを書いてください出力ストリームに移動し、次のブロックに進みます。
これは本当ですか?または、これらのプログラムは単に大量のデータをメモリに読み込んで圧縮し、書き込んでから、もう一度やり直しますか?または、これらの「ストリームコンプレッサー」で使用される巧妙なトリックはありますか?bzip2とxzの両方のmanページでメモリ使用量について説明されていることがわかります。また、man bzip2は、圧縮するデータをブロックに分割してもほとんど失われないという事実を示唆しています。
ブロックサイズが大きくなると、限界リターンが急速に減少します。圧縮の大部分は、ブロックサイズの最初の200または300 kから発生します。これは、小型のマシンでbzip2を使用する場合に留意する価値のある事実です。解凍メモリの要件は、ブロックサイズの選択によって圧縮時に設定されることを理解することも重要です。
他のトリックが使用されているかどうか、またはこれについてもっと読むことができる場所については、まだ聞きたいです。