- ZIP, 7Z (LZMA2) dan ZSTD bekerja secara berbeda tergantung pada tujuannya: kompatibilitas, rasio atau kecepatan dekompresi.
- Data menunjukkan ZSTD sebagai pemimpin dalam dekompresi dan sangat kompetitif dalam rasio pada tingkat menengah.
- Untuk penyimpanan ekstrem, gunakan Zpaq; untuk desktop, gunakan 7Z; untuk penyimpanan universal, gunakan ZIP atau ZIP+ZSTD (metode 93).
Pilih diantara ZIP, 7Z dan ZSTD Tampaknya seperti masalah kecil sampai Anda perlu menerapkan aplikasi, mengirim cadangan setiap hari, atau mengurangi biaya. penyimpanan dan lebar pita (lihat bagaimana kompres dan dekompresi file). Dalam praktiknya, keputusan tersebut mengubah waktu pengiriman, penggunaan CPU/RAM, dan bahkan kompatibilitas dengan alat dan sistem pihak ketiga.
Setelah meninjau beberapa tolok ukur dengan data nyata dan konteks yang sangat berbeda —dari Kumpulan data .NET berukuran 5,4 GB untuk penyebaran, melewati korpus teks Wikipedia dari 1 GB, ke gambar kontainer dan 28,7 GB biner— gambaran lengkap menunjukkan kapan saat yang tepat untuk memprioritaskan rasio, di mana kecepatan dekompresi dan apa implikasi kompatibilitasnya (ZIP klasik, ZIP dengan ZSTD, 7Z dengan LZMA2 atau dengan codec alternatif, dll.).
Apa yang kita bandingkan dan mengapa itu penting
Kami telah menganalisis keluarga yang paling banyak digunakan: ZIP (Mengempes), 7Z (LZMA/LZMA2) y ZSTDSelain itu, mereka masuk ke dalam percakapan Brotli, XZ, bzip2, zpaq dan LZ4, karena dalam kehidupan nyata hampir tidak pernah murni "tatap muka". Dalam penerapan .NET, misalnya, keseimbangan antara kompatibilitas, rasio dan kecepatan Beratnya berbeda dibandingkan dengan pencadangan massal atau pengemasan paket distribusi.
Aturan konteks: jika Anda mencari waktu penerapan minimum dan dukungan yang ada di mana-mana, Anda tidak memilih hal yang sama seperti ketika Anda mencoba meminimalkan penyimpanan dari 15 salinan cadangan (dan membagi file terkompresi) dan mengoptimalkan biaya keluar. Kabar baiknya adalah kini tersedia angka-angka yang sebanding dan pola yang jelas untuk membantu Anda membuat keputusan yang tepat.
Cara kerja setiap format (dan apa artinya dalam praktik)
- ZIP (Mengempes) Ini menggabungkan LZ77 dan Huffman; ini adalah yang paling umum, umum, dan sepenuhnya kompatibel. Biasanya tidak unggul dalam rasio kompresi atau kecepatan dibandingkan dengan opsi modern, tetapi terbuka di mana saja (lihat bagaimana mengelola ekstensi browser) dan implementasinya stabil dan terkenal. ZIP tradisional (metode 8) memiliki keterbatasan historis, meskipun kompresor modern mengatasi banyak kendala ini.
- 7Z Hal ini terutama bergantung pada LZMA/LZMA2, dengan rasio yang sangat baik dan alat yang matang. Selain itu, 7-Zip memiliki kemampuan paralelisasi yang baik dan "standar yang masuk akal» membuat Anda merasa gesit. Ini adalah standar de facto di lingkungan desktop dan pengembangan, dengan dukungan luas di Windows, Linux dan macOS (terkadang menggunakan utilitas eksternal).
- Zstandard (ZSTD)dibuat oleh Facebook (2015), menonjol karena dekompresi yang sangat cepat dan palet level yang sangat luas (1–22). Tujuannya adalah untuk berkinerja sama baiknya atau lebih baik daripada Deflate dan mendekati LZMA dalam rasio, dengan eksekusi yang umumnya lebih cepat. Kami melihatnya terintegrasi ke dalam kernel BSD/Linux, kompresi paket (misalnya Arch Linux menggunakan zstd level 20, mendekompresi 14x lebih cepat dari XZ dengan ukuran hanya +0,8%) dan semakin banyak terdapat dalam jalur CI/CD.
Aktor lain yang patut diketahui
- Brotli, dirancang untuk Web, mengompres lebih baik daripada gzip pada konten tekstual dan mendapat manfaat dari pengkodean konten peramban. Benchmark kompresinya bersifat single-threaded, yang mengaburkan perbandingan waktu. jam dinding asli Jika Anda menggunakan codec multi-thread, tetapi ada implementasi paralel. Di lingkungan server, konsumsi daya Total CPU (pengguna+sistem) lebih relevan daripada jam dinding.
- XZ Meningkatkan LZMA dan menawarkan rasio yang bagus dengan mengorbankan waktu kompresi tinggiUntuk biner besar, ia bisa kompetitif, tetapi kecepatan dekompresinya seringkali tertinggal di belakang ZSTD dan 7Z. Konkurensi multithread dan parameter -e (ekstrem) Mereka sedikit memperbaiki foto tersebut, meskipun tidak menghasilkan keajaiban.
- bzip2/pbzip2 Mereka menyeimbangkan rasio dan CPU kurang lebih di bagian tengah papan. Dengan pbzip2 paralelisme diperoleh. Namun, untuk banyak kasus modern, ZSTD dan 7Z menawarkan trade-off global.
- zpaq Apakah dia "kendaraan segala medan dengan rasio maksimum» dengan kompresi inkremental tipe jurnal; fokusnya adalah pada pemerasan byte, dengan senang hati mengorbankan kecepatan dekompresiUntuk pencadangan dingin, ini mungkin ide yang bagus; untuk penggunaan umum, ini tidak.
Tolok ukur dengan data: teks, biner besar, dan penerapan
1) Dataset tekstual (Wikipedia 1 GB)
Dalam perbandingan ZIP (melalui 7zip), 7zip, XZ, Brotli, Zstandard, zpaq lebih dari 1 GB teks Wikipedia, dibuat grafiknya waktu vs ukuran di setiap level. Penulis memperingatkan: bukti tidak ilmiah dan Referensi monofilamen Brotli menghukum waktu "nyata". Dalam komputasi pengguna+sistem, gambarannya membaik untuk Brotli; ZSTD tampak sangat kompetitif, dekompresi dengan sangat cepat dan dengan rasio di orbit XZ/7zip pada tekanan tinggi.
Temuan utama: ZIP tertinggal dalam rasio kompresi dan waktu; 7zip maju dengan alat yang lebih canggih dan multithreading; XZ meningkatkan rasio tetapi dekompresi lebih lambat bahwa ZSTD; ZSTD menyeimbangkan secara fantastis ketika meningkatkan usaha; dan zpaq mencapai rasio teratas menghabiskan banyak waktu, terutama dalam dekompresi.
2) Uji "kompresi maksimum" PeaZip (Windows, i7-8565U)
Dengan PeaZip/WinRAR, file input 303,0 MB dan lima pengulangan per pengujian, ini adalah nilai rata-rata (ukuran dalam MB; waktu dalam s):
Format | Tamano | Perbandingan | Kompresi | Ekstraksi |
---|---|---|---|---|
RAR terbaik (WinRar) | 78,1 | 25,78% | 28,5 | 1,8 |
7Z ultra (LZMA2) | 71,2 | 23,50% | 137,0 | 3,4 |
7Z Ultra Brotli | 75,1 | 24,79% | 208,0 | 0,8 |
7Z ultra Zstd | 75,3 | 24,85% | 300,0 | 1,2 |
7Z ultra BZip2 | 80,6 | 26,60% | 81,0 | 7,1 |
ZPAQ ultra | 57,6 | 19,01% | 359,0 | 358,0 |
Kesimpulan: ZPAQ Ia menang dalam rasio murni tetapi sangat lambat, bahkan saat mengekstraksi. 7Z (LZMA2) menawarkan rasio yang baik, dengan ekstraksi yang wajar. Menggunakan Brotli/ZSTD dalam 7Z, lalat ekstraksi (Brotli bahkan lebih lagi), sebagai ganti kompresi yang lebih lama daripada LZMA2 dalam ultra. RAR memprioritaskan kecepatan kompresi mengorbankan beberapa rasio, dan jika Anda membutuhkan keamanan, Anda dapat melihat caranya menaruh kata sandi pada file terkompresi.
3) Biner besar 28,7GB (Linux, Ryzen 5 5600G)
Pada file berukuran 28,65–28,7 GB, tujuannya adalah untuk mengompres sebanyak mungkin dan membandingkan rasio dan waktu dengan xz, pbzip2, 7z dan zstd:
- xz-9e-T12: 12,6 GiB dalam ~15m49s (≈ 44,0%)
- pbzip2 -9: 13,07 GiB dalam ~4m29s (≈ 44,55%)
- 7z - mx = 9: 12,9 GiB dalam ~16m43s (≈ 43,98%)
- zstd –ultra -22 -T12: 12,48 GiB dalam ~19m48s (≈ 43,57%)
Dalam "kompresi maksimum", ZSTD menang tipis dalam ukuran, tetapi butuh waktu lebih lama. pbzip2 terkejut dalam kecepatan dengan rasio yang mendekati. Kasus ini menggambarkan bahwa, pada biner yang sangat besar, perbedaan absolut dalam GB sama beratnya dengan menit CPU, dan disarankan mengukur keduanya.
4) Game ZIP (EU4) dan konversi dari tar+brotli ke ZIP dengan ZSTD
Contoh nyata: file simpanan EU4 datang sebagai berkas ZIP yang dikompresi ringan. Kami mencoba mengekstrak dan mengompres ulang berkas tersebut: zip ulang Menghemat sekitar 17%. Dengan mengubah codec di dalam ZIP, angka per levelnya adalah:
Metode | Pengurangan | Waktu (md) |
---|---|---|
zstd (3) | 40% | 463 |
zstd (5) | 45% | 755 |
zstd (7) | 50% | 1256 |
brotli (4) | 32% | 1481 |
brotli (9) | 54% | 4210 |
Selain itu, Muatan Wasm untuk transcoding: ZSTD ~215 kB (136 kB jika hanya encoder), Brotli ~683 kB. Dalam parsing, menghitung waktu pengambilan dari cache ( pengkodean konten Peramban Brotli tidak gratis), ZSTD dan Brotli sangat berimbang: Brotli diurai lebih cepat karena tidak didekompresi ke dalam ruang pengguna; ZSTD Keuntungannya adalah tidak menyentuh pengkodean konten dan membaca lebih ringan dari disk.
Dengan unggahan 30 Mb/s, mengintegrasikan transcoding + transfer dalam ZIP 7,7 MB yang umum: Garis Keturunan Asli 2,05 detik; ZSTD-3 1,70 detik; ZSTD-5 1,88 detik; ZSTD-7 2,28 detik. Rekomendasi praktis condong ke arah ZSTD tingkat 7 untuk penghematan penyimpanan (ketika Anda membayar bucket), meskipun level 3 menarik jika Anda memprioritaskan latensi.
5) Penerapan .NET (terbit 5,4 GB)
Dalam skenario penerapan aplikasi .NET dengan output 5,4 GB (gabungan antara yang mandiri dan yang bergantung pada kerangka kerja), panduan praktisnya jelas: pilih berdasarkan tujuanJika Anda menginginkan kompatibilitas universal, gunakan ZIP klasik; jika hambatannya adalah dekompresi dan kecepatan, ZSTD hadir dengan kuat; jika Anda menginginkannya rasio tinggi Dengan CLI dan perkakas yang terkonsolidasi, 7Z dengan LZMA2 masih menjadi kuda pemenang.
Dekompresi: faktor yang paling terlihat dalam pengalaman tersebut
Beberapa tes independen menunjukkan ZSTD sebagai kelas terpisah dalam dekompresi. Di bangku tekstual, ketika melihat pengguna+sistem Diketahui mengapa ZSTD optimal untuk kompresi sistem file (lihat bagaimana nonaktifkan kompresi otomatis) dan pengemasan paket: pembacaan cepat dan biaya CPU rendah. 7zip Ia menawarkan pengalaman yang sangat bagus, dan perbedaannya dengan XZ lebih dijelaskan oleh utilitas dan multithreading daripada keajaiban codec.
ZIP Ini mengejutkan dengan metrik dekompresi pengguna+sistem, menjadi lebih baik dari yang diharapkan; jika audiens Anda memiliki mesin sederhana atau alur kerja di mana ekstraksi cepat menjadi prioritas, jangan abaikan tanpa pengukuran. ZPAQ, pada bagiannya, mengingatkan kita pada profilnya: rasio yang luar biasa, tetapi waktu ekstraksi yang sangat tinggi, cocok untuk salinan dingin.
Kasus penggunaan: Cara memutuskan dengan data (RAM, waktu, rasio, dan biaya)
Dalam skenario platform kontainer di mana Anda harus melakukan pencadangan harian Untuk 30–100 kontainer, anggaran operasional merupakan faktor terpenting. Sistem penilaian pragmatis diusulkan:
- RAM: Targetkan kompresi 200 MB dan dekompresi 100 MB untuk mendapat skor 5; untuk setiap 50 MB atau lebih, kurangi 1 poin.
- TiempoJendela harian 3 jam untuk mengompres semuanya; per kontainer, 6–1,8 menit. Pada skala, >120 detik skornya 0, setiap -20 detik menambahkan 1, <10 detik adalah 5 poin dalam dekompresi.
- Perbandingan: Dengan objek ~1,6GB (misalnya MariaDB+PHP+WordPress), dan penyimpanan ~$6/TB pada backend tipe Backblaze/E2, menargetkan ≥4:1 membantu menurunkan hasil. biaya keluar (berhati-hatilah dengan AWS yang mengeluarkan biaya $0,09/GB).
Tingkat pengujian, ZSTD tingkat 3 mencapai ~3,5:1 dalam ~3 detik dengan RAM 207 MB; Brotli tingkat 6 mencapai ~4,3:1 dalam ~30 detik dengan profil RAM yang baik. Penyetelan Penyetelan ZSTD (strategi, searchLog, targetLength, minMatch) tidak cukup ditingkatkan tanpa memberikan penalti waktu atau memori; dalam analisis khusus tersebut, Brotli tingkat 6 keluar sebagai favorit. Anehnya, Brotli tingkat 4 Ia menggunakan lebih banyak memori daripada 3/5 tetapi menyamai rasio level 5 dalam waktu setengahnya, pilihan yang sangat menarik jika penyimpanan tambahan 13 MB terjangkau.
Jika tujuannya berubah (misalnya, penyebaran cepat atau membaca intensif), bobotnya bervariasi dan ZSTD cenderung menjadi pilihan yang paling seimbang karena dekompresi kilat dan rasio yang layak pada tingkat rata-rata.
Kompatibilitas, dukungan, dan peran ZIP dengan ZSTD
Sesuatu yang penting: standar ZIP yang disertakan ZSTD (metode 93) sejak spesifikasi 6.3.8 (2020). Ini memungkinkan "Kode pos seumur hidup» dengan codec modern. Bagaimana ekosistem mendukungnya? Saat ini, Windows Explorer tidak membuat atau mengekstrak ZIP dengan ZSTD; 7-Zip utama sedang mengintegrasikannya, dan sudah ada fork yang berfungsi. Di Linux, ada fork p7zip. Situasinya membaik, tetapi masih ada gesekan.
Jika Anda menggunakan Total Commander, Anda dapat mengaktifkan pembacaan 7z dengan ZSTD dengan mengganti TCLZMA64.DLL dengan versi yang kompatibel (misalnya, paket TotalCmd.7z dari 7-Zip ZS). Untuk membuat file 7z dengan ZSTD di dalam TC, plugin lama tidak selalu mengikuti codec yang dipilih dan kembali ke LZMA; lebih baik menggunakan 7-Zip ZS lengkap atau Plugin codec pada instalasi 7-Zip yang sudah ada. Dengan 7-Zip ZS, Anda akan mendapatkan kompresi/pengunduhan Brotli, LZ4, Lizard, ZSTD di dalam kontainer 7z dan penanganannya ZIP+ZSTDPeriksa dengan 7z i
codec mana yang aktif.
Di browser dan jaringan web, pengkodean konten Brotli tampaknya seperti “gratisan total”, tetapi ada nuansanya: middleware, proxy, dan kerangka kerja (misalnya perbedaan antara mode debug/produksi di Next.js) dapat kompresi ulang atau menambahkan latensi. Menyajikan konten yang telah dikompresi sebelumnya juga tidak selalu mudah (Cloudflare Pages tidak mendukungnya secara langsung). Dalam beberapa kasus nyata, mengganti aliran dengan ZSTD di ZIP dan dekompresi di ruang pengguna berkontribusi lebih sedikit ketergantungan lingkungan dan hasil yang setara atau lebih baik.
Parameter yang berguna dan level yang direkomendasikan
En ZSTDLevel 3, 5, dan 7 menawarkan titik operasi yang baik. Sebuah studi yang membahas transcoding dan transfer data dengan kecepatan 30 Mb/s menunjukkan Tingkat 3 sebagai ujung ke ujung tercepat, tetapi Tingkat 7 aku telah menyelamatkan penyimpanan (di EU4, 12,5% kurang dari 5 dan 25% kurang dari 3). Dokumen AWS Athena preferensi untuk tingkat 6–9 ketika 3 tidak digunakan secara default, yang sesuai dengan temuan tersebut.
Godaan untuk mengaktifkan pencocokan jarak jauh Itu nyata, tapi hati-hati: Anda akan meminta siapa pun yang melakukan dekompresi untuk memiliki memori yang sama yang dikompresi. Dalam penyebaran dan apps klien, persyaratan itu mungkin tidak dapat dilaksanakan. Lebih baik untuk tetap jendela dan meja dengan anggaran yang wajar.
En Brotli, pengaturan bintang biasanya adalah level. Mengubah lgwin dapat meningkatkan daya ingat tanpa peningkatan yang signifikan jika Anda sudah mengonsumsinya. Pengamatan bahwa Tingkat 4 mencocokkan rasio 5 dalam waktu setengahnya—dengan biaya RAM yang sedikit lebih banyak—adalah emas ketika Anda menginginkannya latensi lebih rendah tanpa terlalu membebani ukurannya.
untuk XZ, bendera -e Terapkan varian preset yang lebih lambat dengan mencari rasio yang lebih tinggi. Tabel manual mengingatkan Anda bahwa memori kompresor meningkat, tetapi dekompresor tetap. Namun, dibandingkan dengan ZSTD, XZ biasanya kalah dalam dekompresi ketika Anda ingin membuka paket dengan kecepatan tinggi.
Jika Anda bergantung pada ZIP Klasik tetapi Anda menginginkan kecepatan Deflate yang maksimal, pustaka seperti libdeflate Mereka meningkatkan throughput secara signifikan dibandingkan dengan zlib. Dalam ekosistem Rust, zip-rs Belum memudahkan untuk mengubah backend saat membuat ZIP, jadi rute tersebut mungkin tidak tersedia tanpa pekerjaan tambahan.
Penulis yang bersemangat tentang dunia byte dan teknologi secara umum. Saya suka berbagi ilmu melalui tulisan, dan itulah yang akan saya lakukan di blog ini, menunjukkan kepada Anda semua hal paling menarik tentang gadget, perangkat lunak, perangkat keras, tren teknologi, dan banyak lagi. Tujuan saya adalah membantu Anda menavigasi dunia digital dengan cara yang sederhana dan menghibur.