Format arsip / kompresi yang mana?

8

Zip, Rar, 7z, Gzip, BZip2, Tar dll. Saya dengar 7z adalah rasa bulan ini, mengapa? Apakah yang terbaik untuk semua situasi atau apakah ada pilihan yang lebih baik untuk situasi tertentu.

Atau mungkin pengarsipan file yang sebenarnya yaitu WinZip, WinRar, 7Zip dll (sebagai lawan format) memiliki efek yang lebih besar?

Dalam jawaban Anda, bisakah Anda menjelaskan jenis pengorbanan kecepatan / kompresi seperti yang digunakan format yang Anda sebutkan.

Harap berikan tautan ke tes empiris apa pun yang mendukung jawaban Anda.

Latar Belakang: Saya perlu membuat cadangan indeks pencarian khusus yang membuat sekitar 3000 file yang relatif kecil (kurang dari 10MB), masing-masing berisi banyak data berulang.

(Seperti biasa, Wikipedia memiliki artikel yang relevan tetapi bagian tentang perbandingan kinerja singkat.)

Terima kasih

Abu
sumber

Jawaban:

14

Kompres, Gzip, Bzip, Bzip2 bukan untuk pengarsipan banyak file. Mereka hanya mengkompres file tunggal. Untuk pengarsipan, mereka biasanya digunakan dengan TAR. Masalah dengan TAR adalah tidak memiliki tabel indeks . Ini hanya baik jika Anda berencana sedang untuk mengembalikan seluruh hal. Jika Anda berharap bahwa Anda hanya perlu mengembalikan sejumlah file yang dipilih saja, lupakan TAR. Untuk mendapatkan file terakhir dari tar.gzatau tar.bz2arsip, Anda harus mendekompres dan memproses semuanya . Dalam hal zip, rar atau 7-zip, itu akan pergi ke tabel indeks, lewati ke posisi yang relevan dari arsip dan hanya memproses file yang relevan.

Ok, TAR keluar, sehingga membuat Anda dengan ZIP, RAR dan 7-ZIP. Dari ketiganya, ZIP adalah yang paling berkembang biak, sebagian besar mendukung apa pun, banyak aplikasi memiliki dukungan bawaan. Dan itu cepat. Di sisi lain 7-ZIP juga portabel, pustaka adalah LGPL, dan memiliki tingkat kompresi yang jauh lebih baik daripada dua lainnya, datang sebagai biaya yang lebih memakan CPU. RAR benar-benar pecundang di sana, tidak ada kompresi hebat, tidak juga portabel, atau cepat.

EDIT: tampaknya pilihan terbaik adalah 7-ZIP, tetapi dengan metode kompresi bzip2. Dengan cara ini Anda tidak akan memiliki kelemahan TAR, tetapi Anda masih dapat memanfaatkan dukungan multi-core bzip2. Lihat artikel ini.

vartec
sumber
Informasi yang sangat bagus, terima kasih. Saya telah melihat TAR dalam permainan saya dengan Linux tetapi tidak pernah melihatnya dengan cermat.
Ash
Saya harus tidak setuju tentang rar. Kompresinya baik (dibandingkan dengan gzip atleast) dan kecepatan tampaknya baik dalam kasus penggunaan saya. Satu hal yang saya sukai dari rar adalah ia dapat menangani konten streaming atau file individual, dan memungkinkan Anda untuk secara otomatis menyertakan cap waktu dalam nama file ...
Dscoduc
10

Bacaan yang disarankan:

Kompresi File di Era Multi-Core (Jeff Atwood alias CodingHorror, februari 2009)

Saya telah bermain-main sedikit dengan kompresi file lagi, karena kami menghasilkan beberapa file cadangan yang sangat besar setiap hari di Stack Overflow.

Kami menggunakan versi 7-bit 64-bit terbaru (4,64) di server database kami. Saya bukan penggemar berat lebih dari dua inti pada desktop, tapi itu tidak punya otak untuk server. Semakin banyak core CPU yang lebih meriah! Server ini memiliki dua CPU quad-core, total 8 core, dan saya sedikit kecewa ketika mengetahui bahwa baik RAR maupun 7zip tampaknya tidak menggunakan lebih dari 2 CPU.

Namun, bahkan jika itu hanya menggunakan 2 core untuk kompres, algoritma 7zip luar biasa efektif, dan telah berkembang selama beberapa tahun terakhir menjadi sangat cepat. Saya dulu merekomendasikan RAR melalui Zip, tetapi mengingat peningkatan efisiensi 7zip dan fakta bahwa itu gratis dan RAR tidak, itu adalah pilihan logis sekarang.

Dan mengenai algoritma:

Mengapa bzip2 dapat bekerja jauh lebih cepat daripada 7zip? [...] Bzip2 menggunakan lebih dari 2 core CPU untuk memparalelkan kerjanya.

percikan
sumber
Terima kasih untuk tautannya. Kita tentu tahu pandangan Jeff didasarkan pada pengalaman nyata!
Ash
4

Ini bukan soal efisiensi dan kecepatan. Tentu mereka penting dan Anda dapat melihat tolok ukur untuk itu dan memilih dengan bijak dari opsi (meskipun saya akan merekomendasikan beberapa tolok ukur sederhana Anda sendiri dengan data Anda sendiri di server Anda sendiri). Tetapi pengarsipan mengarah pada titik tertentu untuk mengakses data Anda lagi (jika tidak, mengapa tidak menghapus saja?). Atau mungkin bertahun-tahun di jalan Anda tidak akan mengakses data sama sekali, tetapi seseorang pihak ketiga. Pilih sesuatu yang akan ada saat Anda perlu mengakses data dan sesuatu yang dikenali orang. Saya pribadi menggunakan 7zip, tetapi ketika saya mengarsipkan file, orang lain mungkin perlu saya menggunakan zip. Mereka tahu itu, banyak alat bisa menanganinya. Mungkin tidak secepat atau sekecil itu, tetapi membantu dengan faktor manusia.

Joshua Hunter
sumber
Poin yang bagus. Indeks pencarian ini akan mengekstraksi data langsung dari file terkompresi tertentu. Itu sebabnya saya tertarik jika ada format yang menawarkan kinerja kompres / dekompresi yang dapat dikonfigurasi. Jadi saya lebih melihat aspek kompresi daripada pengarsipan untuk aspek masa depan.
Ash
3

lzma tampaknya berkinerja sangat baik di kedua rasio kompresi dan kecepatan.

Dalam http://tukaani.org/lzma/benchmark benchmark berikut , pengaturan tercepat untuk lzma memberi waktu kompresi jauh lebih cepat daripada opsi bzip2 tercepat, sementara masih memberikan kompresi lebih baik daripada opsi bzip2 paling lambat:

    rasio bzip2 lzmash
    tercepat 35,8% 31,7%       
    paling lambat 34,0% 25,4%

    waktu bzip2 lzmash  
    tercepat 1m 26s 0m 58s  
    2m 37s 12m 20s paling lambat

    * Mengompresi instalasi OpenOffice.org 1.1.4 untuk Linux secara penuh (203 MB) 

Ia bekerja sangat baik dengan data biner, tapi saya pikir saya membaca beberapa tolok ukur teks biasa di mana bzip2 mengungguli itu.

Halaman manual lzma layak dibaca:

   lzma  provides  notably  better compression ratio than bzip2 especially
   with files having other than plain text content. The other advantage of
   lzma  is fast decompression which is many times quicker than bzip2. The
   major disadvantage is that achieving  the  highest  compression  ratios
   requires  extensive  amount of system resources, both CPU time and RAM.
   Also software to handle LZMA  compressed  files  is  not  installed  by
   default on most distributions.
Guy C
sumber
Saya juga tidak sampai minggu lalu ketika seseorang merekomendasikannya pada salah satu pertanyaan Server Fault saya. Ini terlihat mengesankan, layak untuk menyelidiki kinerja dengan teks biasa, jika Anda akan menggunakannya untuk itu.
Guy C
LZMA adalah nama algoritma yang digunakan dalam 7-zip.
vartec
2

Lihatlah entri Wikipedia ini . Menuju ke bawah, "Perbandingan efisiensi". Ini akan memberi Anda persentase kompresi, dan waktu yang dibutuhkan, kira-kira. Semua angka itu akan bervariasi (tergantung kecepatan) berdasarkan kecepatan mesin yang digunakan, jumlah memori, dll.

Lebih banyak tolok ukur kompresi:


sumber
Terima kasih, tetapi saya telah membaca itu dan berpikir itu agak singkat (lihat poin saya dalam pertanyaan). Apakah Anda tahu ada tes yang lebih rinci dalam skenario yang lebih bervariasi?
Ash
Menambahkan beberapa tautan yang saya harap memberikan lebih banyak informasi.
2

Membandingkan zip, 7z, rar dengan dua case

Tergantung pada apa yang Anda kompres, tetapi secara umum 7z lebih baik menggunakan beberapa prosesor, dan format kompresi 7z itu sendiri menghasilkan kompresi yang lebih tinggi daripada zip, dan kadang-kadang lebih tinggi dari rar (walaupun rar dan 7z hampir sama, tetapi rar tidak gratis ...)

Tes saya beberapa bulan lalu memberikan hasil ini:

Mengompresi file database akses 10MB tunggal:

Database.mdb 17,240,064 (original)
Database.zip  1,634,794 (Regular zip, 11:1)
Database.rar    262,212 (RAR compression, 66:1)
Database.7z     195,678 (7-zip compression, 88:1)

Mengkompresi folder yang berisi lebih dari sembilan ribu file dari berbagai jenis (903.488KB) dan mendapatkan yang berikut (ini adalah kombinasi dari kode sumber dan semua alat di sekitarnya untuk perangkat lunak yang sedang dikembangkan):

Type   Time  Size (KB)  Compression
ZIP    7:28   247,529   3.7:1
RAR    8:15   222,232   4.1:1
7z    10:49   181,633   5.0:1

Untuk keperluan waktu, ini pada Core2 Duo, 2GHz, 1GB RAM, dan hard drive yang murah.

Jadi 7z memberikan peningkatan substansial dalam rasio kompresi dalam dua kasus yang saya uji di atas dan di luar zip, dan bahkan meningkat pada rar, tetapi 7z tentu lebih lambat. Tidak begitu signifikan, tetapi cukup untuk dicatat.

-Adam

Adam Davis
sumber
Tes yang bagus. Kompresi MDB itu sangat besar. Saya hanya mendapatkan 4 banding 1 pada file indeks kata biner 100k yang saya uji. Saya kira itu menunjukkan betapa pentingnya untuk menguji menggunakan file / data yang mirip dengan apa yang sistem Anda akan gunakan.
Ash
Ya, file MDB semuanya halus dan tidak ada substansi. File biner akan mendapatkan lebih sedikit (karena menggunakan semua 8 bit, sementara file teks menggunakan sedikit lebih dari 6 bit) dan kemungkinan bagus tidak ada banyak duplikasi yang terjadi di dalamnya. Selalu penting untuk diuji. Anda mungkin lebih beruntung bermain dengan pengaturan kompresi - kadang-kadang Anda dapat mengoptimalkannya untuk penggunaan dan menjadi lebih baik daripada pengaturan standar yang disediakan.
Adam Davis
0

Saya baru saja menginstal dar (tetapi belum memiliki kesempatan untuk bermain dengannya). Ini mirip dengan tar dengan kompresi gzip atau bzip2, dengan kemampuan tambahan untuk membagi arsip menjadi beberapa bagian, dan menghitung paritas sehingga jika satu atau lebih bagian rusak, ia dapat direkonstruksi dari file parity.

pgs
sumber