Bagaimana saya bisa mengevaluasi pilihan format arsip terbaik untuk mengompresi file?

24

Secara umum, saya telah mengamati yang berikut:

  • File atau alat Linux-y menggunakan bzip2 atau gzip untuk mendistribusikan arsip
  • File atau alat Windows-y menggunakan ZIP untuk mendistribusikan arsip
  • Banyak orang menggunakan 7-Zip untuk membuat dan mendistribusikan arsip mereka sendiri

Pertanyaan:

  • Apa kelebihan dan kekurangan dari format ini, yang semuanya tampak sebagai format terbuka? Kapan / mengapa saya harus memilih satu (katakanlah, 7-Zip) di atas yang lain (katakanlah, ZIP)?
  • Mengapa tren di atas tampak bertahan, meskipun semua ini adalah format portabel? Apakah ada keuntungan khusus untuk menggunakan format arsip tertentu pada platform tertentu?
Mehrdad
sumber
1
Lihat juga: stackoverflow.com/questions/2397474/…
Thomas Bonini
@Sathya, @Andreas: Terima kasih atas tautannya, itu membantu dan menjawab bagian dari pertanyaan saya. :)
Mehrdad
1
Kompresi adalah bidang yang sangat kompleks, dan tidak ada satu algoritma yang dapat menghasilkan hasil yang optimal untuk semuanya - lebih jauh lagi, ini adalah masalah Anda dapat melempar sumber daya dan mendapatkan hasil yang lebih baik, tetapi juga yang dapat dilakukan hampir juga dalam waktu yang jauh lebih sedikit. Beberapa algoritma fokus pada kecepatan yang cepat dan memori, beberapa fokus pada menghasilkan file sekecil mungkin terlepas dari berapa lama waktu yang dibutuhkan atau apakah Anda memerlukan RAM 12GB (tidak berlebihan) untuk melakukannya, begitu seterusnya.
Phoshi
1
@ Phoshi, ini harus menjadi jawaban.
Yitzchak

Jawaban:

16

Ada berbagai macam format dan metode kompresi yang tersedia, beberapa tidak kompres sama sekali dan dirancang untuk menyimpan sejumlah file dalam satu arsip, dan kompresor eksperimental baru lainnya ( berbasis PAQ ) dirancang untuk mengompres seagresif mungkin, terlepas dari waktu yang diperlukan untuk melakukan operasi tersebut.

Anda perlu mengevaluasi fitur yang Anda perlukan dari pilihan metode kompresi Anda, dan juga mempertimbangkan konteks penggunaannya.

Berbagai fitur dan pertimbangan termasuk:

  • Kemampuan kompresi - Apakah file menyusut cukup signifikan?
  • Kemudahan Penggunaan - Jika file tersebut menuju ke pengguna lain, apakah arsipnya akan mudah diekstraksi atau akankah diperlukan lebih banyak perangkat lunak yang akan diinstal?
  • Perlindungan kata sandi dan / atau enkripsi - Apakah langkah-langkah keamanan ini diperlukan?
  • Dukungan beberapa volume - Jika media target mengharuskan file dipecah menjadi potongan-potongan yang sesuai, apakah format mendukungnya dengan elegan. Misalnya, 650 MB untuk CD.
  • Perbaikan dan pemulihan - Jika file menjadi sebagian rusak, apakah ia menawarkan catatan pemulihan untuk membantu pemulihan data?
  • Dukungan Unicode - Apakah pengarsip mendukung nama file internasional atau hanya ASCII standar?
  • Persyaratan Sistem - Kompresor modern seperti 7-Zip memang menawarkan kemampuan untuk meningkatkan efisiensi kompresi dengan menggunakan kamus yang lebih besar (kamus adalah referensi data yang diulang secara umum dalam file terkompresi), tetapi ini pada gilirannya meningkatkan konsumsi memori pada kompresi dan waktu dekompresi.
  • Dukungan ekstraksi mandiri - Dapatkah arsip digulung menjadi file yang dapat dieksekusi yang memberikan kemudahan penggunaan kepada siapa pun yang perlu menggunakannya? (Ingat juga, Anda hanya dapat membuat self-extractor untuk satu platform. Secara umum, self-extractor Windows tidak akan berfungsi di Linux secara default, kecuali dijalankan melalui lapisan kompatibilitas seperti Wine).
  • Atribut sistem file - Apakah kompresor menyimpan metadata dan izin sistem file yang relevan yang mungkin layak dipertahankan pada saat ekstraksi?

Secara umum ZIP adalah format yang paling umum, tetapi ukuran lebih dari 4 GB umumnya tidak didukung (jika sama sekali), dukungan keamanan umumnya dianggap buruk (kata sandi standar dapat dikompromikan dengan serangan teks biasa, dan enkripsi lebih lanjut adalah umumnya diimplementasikan sebagai turunan tidak resmi dari format oleh vendor perangkat lunak ZIP komersial).

Terlepas dari itu, sebagian besar format populer lainnya akan memiliki beberapa bentuk dukungan pada semua sistem operasi dengan menginstal lebih banyak perangkat lunak.

Pilihan pribadi saya adalah 7-Zip , karena memiliki kompresi yang hebat dan fleksibel; meskipun memiliki antarmuka pengguna yang aneh pada Windows. Ada de-kompresor untuk Linux dan Mac OS X (meskipun tidak berbasis GUI sebagai standar).

Ruairi Fullam
sumber
3
Jika arsip dimaksudkan untuk distribusi, penting juga untuk mempertimbangkan audiens target Anda dan menggunakan format yang didukung secara default pada platform mereka. Aksesibilitas mungkin lebih penting daripada pertimbangan lain dalam kasus ini.
hammar
Terima kasih +1 atas informasinya, meskipun akan lebih baik untuk menyebutkan format mana yang mendukung poin-poin tersebut. :)
Mehrdad
Saya tergoda tetapi ada banyak format yang tersedia, yang akan membutuhkan waktu lama untuk mendaftar. Wikipedia memang memiliki fitur matriks format kompresi yang baik yang dapat membantu: en.wikipedia.org/wiki/Comparison_of_archive_formats
Ruairi Fullam
1
Sejarah mengajarkan pelajaran penting ketika datang untuk mengekstraksi file arsip. Ada arsip self-extracting dari dua dekade lalu bahwa orang tidak dapat lagi mengekstrak diri karena mesin mereka tidak dapat menjalankan program MS / PC-DOS, atau karena program self-extractor macet sebagai akibat dari perubahan prosesor, atau karena self-extractor. extractor mengeluh bahwa cakram penuh ketika mereka tidak karena mereka tidak berharap cakram menjadi begitu besar, atau ...
JdeBP
Poin itu tentu bisa diperdebatkan, saya belum menemukan masalah khusus itu tetapi saya bisa melihatnya terjadi; Saya kira itu semua adalah pertanyaan tentang tujuan akhir pembuatan arsip dan umur panjang yang diharapkan dari file yang digunakan. Tentu saja jika Anda memiliki arsip lama yang sulit diekstrak dari era DOS, Anda bisa menggunakan DOSBox, atau bahkan membuat VM jika diperlukan.
Ruairi Fullam
8

Satu hal yang terlintas dalam pikiran adalah posting blog (dua tahun) dari Jeff Atwood: Kompresi File di Era Multi-Core . Dalam artikel itu ia menemukan bahwa bzip2 mengungguli 7-zip saat menjalankan lebih dari dua core.

matpe
sumber
+1 omg! Saya tidak tahu itu. Rasio kompresi tampaknya tidak sepadan. :)
Mehrdad
2
Pos itu sudah lebih dari 2 tahun. Bukankah 7-zip bekerja lebih baik dengan lebih dari dua core sekarang?
cregox
BZIP2 mengkompres lebih efisien pada beberapa core karena mengkompres menjadi blok 100-900KB, sehingga dapat menyebar blok pada core yang terpisah, tetapi efisiensi kompresi hilang karena blok ini dianggap berbeda satu sama lain.
Ruairi Fullam
4

Untuk pertanyaan pertama Anda, 7-Zip adalah pengarsip daripada yang dapat menggunakan banyak algoritma untuk kompres dan dekompresi data.

Untuk pertanyaan kedua Anda, pastikan platform mendukung alat yang mendukung format yang diberikan. Sebagai contoh, saya akan menghindari menggunakan RAR di Mac. Meskipun dimungkinkan untuk digunakan, dan ada utilitas gratis yang mendukungnya, mereka tidak memiliki antarmuka yang jauh lebih kaya yang dimiliki utilitas Windows yang mendukung RAR (menurut pengalaman saya).

soando
sumber
Padahal saya pribadi benci dengan program rar grafis dan selalu menggunakan baris perintah, bahkan di Windows.
CarlF
4

Seperti yang disebutkan orang lain, pilihan format kompresi tertentu sangat bergantung pada penggunaan dan audiens yang dituju.

  • Arsip .tar.gz dan tar.bz2 ideal untuk digunakan pada sistem Linux (dan dengan ekstensi untuk berbagi file dengan pengguna Linux) karena alat tar, gzip dan bzip2 sebagian besar ada di mana-mana pada platform, dan karena format .tar memiliki penuh dukungan untuk izin Unix dan properti khusus platform lainnya. Pilihan antara gzip dan bzip2 untuk mengompresi arsip tar terutama adalah keputusan tentang rasio kecepatan versus kompresi, dengan bzip2 memberikan file yang lebih kecil tetapi dengan kecepatan kompresi yang jauh lebih lambat. Kerugian dari format ini termasuk kurang kompatibilitas dengan Windows dan (potensi) perlu mengompres seluruh arsip untuk mengekstrak satu file.

  • Arsip ZIP dapat diekstraksi pada sebagian besar platform menggunakan alat asli, jadi ini adalah pilihan ideal untuk mengirim arsip ke pengguna non-teknis yang tidak nyaman menginstal perangkat lunak arsip pihak ketiga seperti 7-Zip. Tingkat kompresi tidak sebagus algoritma yang lebih canggih dan tidak mendukung izin Unix, tetapi ini adalah format yang sangat baik jika Anda ingin mengirim arsip foto liburan ke nenek Anda, misalnya. ZIP juga menyediakan beberapa perlindungan kata sandi dasar, dan dapat dengan cepat mengekstrak file dari mana saja di arsip.

  • 7-Zip baik jika Anda menginginkan rasio kompresi terbaik. Seperti ZIP, itu tidak mendukung izin atau kepemilikan file Unix, dan juga tidak diinstal secara default pada sebagian besar platform yang membuatnya sedikit lebih berfungsi untuk digunakan, tetapi mungkin sepadan dengan Windows jika keuntungan rasio kompresi penting. Dalam lingkungan semua-Linux akan lebih baik untuk menggunakan alat kompresi 'xz' atau 'lzma' bersama dengan tar, yang beroperasi dengan cara yang persis sama seperti 'gzip' dan 'bzip2' tetapi menggunakan algoritma LZMA yang lebih maju seperti 7 -Zip.


sumber
2

Sama seperti contoh, saya menggunakan format yang disebutkan dalam kasus ini:

  • File teks (terutama log): bz2
  • Kumpulan file yang akan didistribusikan (mis. Kode sumber): gz (tar.gz really).
  • Berbagai macam file: 7zip. Saya dapat memampatkan hampir semua hal dengan cara yang sangat efisien. Enkripsi lintas platform, sumber terbuka, stabil, ringan, file (header dan data), ... Bisakah Anda meminta yang lain? :)

Saya menghindari RAR sama sekali dan setiap kali saya menerima file RAR dari seseorang yang saya kenal, saya katakan padanya untuk berhenti menggunakan format itu karena sifatnya propietary, dan mungkin dia menggunakan perangkat lunak yang tidak berlisensi (kebanyakan orang mengunduh versi uji coba WinRAR dan terus menggunakan selamanya).

PS: Saya menjalankan Ubuntu (terutama) dan Windows (baik dual boot dan VirtualBox).

Glarrain
sumber
1

Setidaknya ada empat pekerjaan terpisah yang sering membingungkan karena alat-alat populer mengintegrasikannya:

  1. Pengarsipan: kemampuan untuk menggabungkan beberapa file (termasuk metadata) ke dalam satu file, menjaga sebanyak mungkin hal. Di dunia Linux / Unix, pengarsipan secara tradisional dilakukan dalam format file TAR.
  2. Kompresi: kemampuan untuk meminimalkan lossless ukuran aliran data biner. Di dunia Linux / Unix, ini secara tradisional dilakukan oleh GZip dan BZip2.
  3. Enkripsi: kemampuan untuk mengacak data dengan kunci
  4. Checksum: kemampuan untuk mendeteksi (dan mungkin memperbaiki) kesalahan.

Di mana-mana .tar.gz dan .tar.bz berkorespondensi dengan filosofi Unix tentang alat kecil yang melakukan satu pekerjaan dengan baik, di atas satu alat yang melakukan segalanya. Format file TAR tidak mendukung kompresi atau enkripsi, tetapi dapat dikompresi lebih lanjut oleh kompresor apa pun (termasuk sebagai .tar.zip atau .tar.7z). Pekerjaan GZip dan BZip2 hanya untuk mengompres aliran file ke streaming file lain, lapisan kompresi tidak perlu peduli bagaimana mempertahankan metadata atau enkripsi atau checksum. Namun seiring berjalannya waktu, beberapa pintasan telah dibuat dalam tarprogram untuk bekerja dengan kompresor lebih nyaman.

Dalam format file zip dan 7z, pekerjaan terpisah ini dilakukan oleh satu program dalam format file super tunggal.

Mengapa tren di atas tampak bertahan, meskipun semua ini adalah format portabel? Apakah ada keuntungan khusus untuk menggunakan format arsip tertentu pada platform tertentu?

Karena sudah seperti itu dilakukan, kode sumber program secara tradisional didistribusikan sebagai .tar.gz atau .tar.bz2, karena menjaga izin file, waktu modifikasi, dll penting untuk berbagai alat yang digunakan untuk pemrograman (misalnya membuat).

Langkah pengarsipan dan kompresi yang terpisah telah bekerja selama bertahun-tahun dengan sangat baik, memiliki keuntungan yang jelas karena dapat secara bebas mencampur dan mencocokkan pengarsipan dan kompresi, dan kelemahannya (proses kompresi 2 langkah) dapat dengan mudah dielakkan dengan mengembangkan alat yang lebih pintar ( sebagian besar program kompresi linux modern akan langsung dikompres ke .tar.gz atau .tar.bz2, menyembunyikan langkah perantara).

Tidak ada alasan kuat untuk pindah ke format file lain, kompresor yang lebih baru tidak memiliki tingkat kompresi yang jauh lebih baik untuk membenarkan melanggar tradisi dan tar dapat mempertahankan semuanya dengan cukup baik.

Lie Ryan
sumber