9

私はファイルを保存するツイストPythonのイベントループベースのサーバーを使用していますが、ファイルを圧縮性に従って分類できるようにしたいと思います。

圧縮の恩恵を受ける可能性が高い場合は、btrfs圧縮がオンになっているディレクトリに移動します。そうでない場合は、別の場所に移動します。

確認する必要はありません。80%の精度で十分であり、多くのディスクスペースを節約できます。しかし、CPUとfsのパフォーマンスの問題もあるので、すべてを圧縮して保存することはできません。

ファイルは低メガバイト単位です。CPUの巨大なチャンクを使用し、イベントループを過度に遅延させるか、圧縮アルゴリズムをリファクタリングしてイベントループに適合させることなく、それらをテスト圧縮することはできません。

圧縮率をすばやく見積もるためのベストプラクティスはありますか?私が思いついたのは、ファイルの先頭からデータの小さなチャンク(数キロバイト)を取得し、それをテスト圧縮して(おそらく許容できる遅延で)、それに基づいて決定することです。

助言がありますか?ヒント?私の推論および/または問題の欠陥?

4

3 に答える 3

12

ファイルの真ん中からわずか10Kでうまくいきます。ファイルの残りの部分を表していないヘッダーまたはトレーラー情報が含まれている可能性があるため、最初または最後は必要ありません。一般的なアルゴリズムである程度の圧縮を得るには、10Kで十分です。これにより、ファイル全体の相対的な圧縮量が予測され、その中間の10Kが代表的なものになります。取得する絶対比率はファイル全体と同じではありませんが、圧縮なしとの差の量により、しきい値を設定できます。多くのファイルを試して、しきい値を設定する場所を確認してください。

前述のように、明らかにすでに圧縮されているファイル(.pngなど)には何もしないことで時間を節約できます。.jpg。、。mov、.pdf、.zipなど。

エントロピーの測定は、圧縮率の0次推定値を与えるだけなので、必ずしも良い指標ではありません。エントロピーが十分に圧縮可能であることを示している場合、それは正しいです。エントロピーが十分に圧縮可能でないことを示している場合、それは正しい場合とそうでない場合があります。実際のコンプレッサーは、圧縮率のはるかに優れた推定量です。1Kで実行するのにそれほど時間はかかりません。

于 2012-10-07T17:11:10.633 に答える
6

あなたが探しているのは、ファイルのエントロピーを計算する方法だと思いますか?

この質問には、ファイルのエントロピーを計算するためのあらゆる種類のメソッドが含まれています(これにより、ファイルの「圧縮率」を取得できます)。この記事の要約からの引用は次のとおりです(エントロピーとテストデータ圧縮の関係 Kedarnath J. Balakrishnan、メンバー、IEEE、およびNur A. Touba、シニアメンバー、IEEE):

データセットのエントロピーは、それに含まれる情報量の尺度です。完全に指定されたデータのエントロピー計算は、そのデータを圧縮できる量の理論上の限界を取得するために使用されています。このホワイトペーパーでは、不完全に指定されたテストデータ(つまり、ビットが指定されていないか、ビットを気にしない)のエントロピーの概念を拡張し、エントロピーの使用を調べて、特定のシンボル分割の最大圧縮量の限界を計算する方法を示します。テストデータをシンボルに分割するさまざまな方法がエントロピーに与える影響を調べます。固定長シンボルを使用するパーティションのクラスについては、エントロピーを減らすことを気にしないことを指定するための欲張りアルゴリズムが説明されています。これは、最小エントロピー集合被覆問題と同等であることが示されているため、ドントケアを指定するすべての方法の中で可能な最小エントロピーに関して、加法定数誤差の範囲内にあります。エントロピーの計算を近似するために使用できる多項式時間アルゴリズムについて説明します。文献で提案されているさまざまなテストデータ圧縮技術が、エントロピー境界に関して分析されています。特定のタイプのテストデータエンコーディング戦略の制限と利点は、エントロピー理論を使用して研究されます

さらに建設的にするには、このサイトをチェックして、データのチャンクのエントロピー計算のPython実装を確認してください

于 2012-10-07T15:15:58.550 に答える
5

圧縮されたファイルは通常、うまく圧縮されません。これは、ほとんどのメディア形式にすでに圧縮が含まれているため、ほとんどすべてのメディアファイルが十分に圧縮されないことを意味します。明らかにこれにはBMPやTIFF画像などの例外がありますが、十分に圧縮されたファイルタイプ(PNG、MPEG、ビジュアルメディア(gzip、bzip2など)から離れてベンチャー)のホワイトリストを作成してスキップし、遭遇する残りのファイルはうまく圧縮されます。

気になりたい場合は、システムにフィードバックを組み込むことができます(実行した圧縮の結果を観察し、結果の比率をファイルタイプに関連付けます)。一貫して圧縮率が低いファイルタイプに遭遇した場合は、それをホワイトリストに追加できます。

これらのアイデアは、ファイルのタイプを識別できるかどうかに依存しますが、これをかなりうまく実行する標準的なユーティリティがあります(通常、80%よりはるかに優れています)-file(1)、/ etc/mime.typesなど。

于 2012-10-07T15:27:13.750 に答える