8

使用: ユーザーは、AWS S3 アカウントに多くのオブジェクトを持っています。プロジェクト全体を一度にダウンロードする機能を追加しています。私たちはストレージよりも効率性に関心があります。

さまざまなオプション (ZipArchive、PclZip) を見た後、Chilkatの使用を推奨するこのガイドに出会いました。

その方法は非常に理にかなっており、要約すると次のようになります。

  • アップロード時に各ファイルを事前圧縮し、S3 に保存します
  • 「プロジェクトのダウンロード」は、各圧縮ファイルのダウンロードを開始し、次にQuickAppend (Chilkat 用語) を実行し、「即座に」(ファイルあたり 200 ミリ秒) それらを圧縮ファイル全体に追加します。
  • 新しい Zip ファイルを S3 にアップロードし、リンクを提供します

私が直面している問題は、Chilkat のライセンスが 249 ドルで、無料の代替品を探していることです。

別の方法(これも無料) では、同様の概念が使用されています。

  • アップロード時に各ファイルを事前圧縮し、S3 に保存します
  • 「プロジェクトのダウンロード」は、各圧縮ファイルのダウンロードを開始し、それらをまとめてtarします
  • 新しい Zip ファイルを S3 にアップロードし、リンクを提供します

これに対処するための「標準」または「理想的な」方法はありますか?

4

2 に答える 2

2

私のローカル システムでは、PHP の組み込み zip ライブラリは、10 ファイルの 24 MB zip を 21 ファイルの 51 MB zip に約 800 ミリ秒でマージできます。これは、報告された 200 ミリ秒/ファイルに匹敵しますが、ファイルの大きさはわかりませんまたは使用しているハードウェアの種類。

ガイドの作成者が最初に使用した Java ライブラリとは異なり、PHP の zip ライブラリは C で実装されているため、作成者が見たのと同じ Java から C へのパフォーマンスの向上は見られません。そうは言っても、ChillkatのQuickAppend仕組みやPHPのzipライブラリとの比較はわかりませんが、PHPで行うかChillkatで行うかに関係なく、事前に圧縮されたファイルに追加するのが最速のソリューションのようです.

$destination = new ZipArchive;
$source = new ZipArchive;

if($source->open('a.zip') === TRUE 
&& $destination->open('b.zip') === TRUE) {

    $time_start = microtime(true);

    $temp_dir = "/tmp/zip_" . time();        
    mkdir($temp_dir,0777,true);
    $source->extractTo($temp_dir);
    $source->close();

    $files = scandir($temp_dir);
    $file_count = 0;

    foreach($files as $file) {
        if($file == '.' || $file == '..')
          continue;

        $destination->addFile("$temp_dir/$file");
        ++$file_count;
    }

    $destination->close();
    exec("rm -rf $temp_dir &");

    $time_end = microtime(true);
    $time = $time_end - $time_start;

    print "Added $file_count files in " . ($time * 1000). "ms \n";    
}

出力

-rw-rw-r-- 1 fuzzytree fuzzytree 24020997 Jun  4 15:57 a.zip
-rw-rw-r-- 1 fuzzytree fuzzytree 51418980 Jun  4 15:57 b.zip

fuzzytree@atlas:~/testzip$ php zip.php 
Added 10 files in 872.43795394897ms

fuzzytree@atlas:~/testzip$ ls -ltr *zip
-rw-rw-r-- 1 fuzzytree fuzzytree 24020997 Jun  4 15:57 a.zip
-rw-rw-r-- 1 fuzzytree fuzzytree 75443030 Jun  4 15:57 b.zip
于 2014-06-04T21:10:10.203 に答える
0

私は、人々が 1 つの zip ファイルで数十または数百のファイル (100Mb 程度) を頻繁にダウンロードするサイトを持っています。ここで見つけたと思われるzipstreamを使用します。制限についてはよくわかりませんが、うまく機能しているようで、事前に個々のファイルを圧縮する必要はありません。

于 2014-06-04T05:13:45.567 に答える