ฉันจะประเมินตัวเลือกรูปแบบการเก็บถาวรที่ดีที่สุดสำหรับการบีบอัดไฟล์ได้อย่างไร


24

โดยทั่วไปฉันได้สังเกตสิ่งต่อไปนี้:

  • ไฟล์หรือเครื่องมือ Linux-y ใช้bzip2หรือgzipเพื่อกระจายไฟล์เก็บถาวร
  • ไฟล์หรือเครื่องมือ Windows-y ใช้ ZIP สำหรับการจัดเก็บเอกสาร
  • หลายคนใช้7-Zipสำหรับการสร้างและกระจายจดหมายเหตุของตัวเอง

คำถาม:

  • อะไรคือข้อดีและข้อเสียของรูปแบบเหล่านี้ซึ่งทั้งหมดเป็นรูปแบบเปิด? เมื่อใด / เพราะเหตุใดฉันจึงควรเลือกหนึ่ง (พูด, 7-Zip) มากกว่าอีกอัน (พูด, ZIP)?
  • ทำไมเทรนด์ดังกล่าวถึงถือแม้ว่าทั้งหมดเหล่านี้เป็นรูปแบบพกพา มีข้อได้เปรียบอะไรเป็นพิเศษหรือไม่ในการใช้รูปแบบไฟล์เก็บถาวรเฉพาะบนแพลตฟอร์มเฉพาะ


1
ดูเพิ่มเติมที่: stackoverflow.com/questions/2397474/…
Thomas Bonini

@Satya, @Andreas: ขอบคุณสำหรับลิงค์ที่เป็นประโยชน์และตอบคำถามบางส่วนของฉัน :)
Mehrdad

1
การบีบอัดเป็นฟิลด์ที่ค่อนข้างซับซ้อนและไม่มีใครสามารถสร้างผลลัพธ์ที่ดีที่สุดให้กับทุกสิ่งได้นอกจากนี้ยังเป็นปัญหาที่คุณสามารถโยนทรัพยากรและรับผลลัพธ์ที่ดีกว่า แต่ก็สามารถทำได้โดยใช้เวลาน้อยลง อัลกอริธึมบางอย่างเน้นที่ความรวดเร็วและแสงหน่วยความจำบางจุดเน้นที่การสร้างไฟล์ที่เล็กที่สุดเท่าที่จะเป็นไปได้โดยไม่คำนึงว่าจะใช้เวลานานแค่ไหนหรือคุณต้องการ RAM ขนาด 12GB (ไม่เกินจริง)
Phoshi

1
@Phoshi นี่ควรเป็นคำตอบ
Yitzchak

คำตอบ:


16

มีรูปแบบการบีบอัดและวิธีการที่หลากหลายมากมายบางชนิดไม่บีบอัดเลยและถูกออกแบบมาเพื่อเก็บไฟล์จำนวนหนึ่งไว้ในที่เก็บถาวรหนึ่งชุดและชุดทดลองอัดรุ่นใหม่อื่น ๆ (ที่ใช้PAQ ) ได้รับการออกแบบมา โดยไม่คำนึงถึงเวลาที่ใช้ในการดำเนินการดังกล่าว

คุณต้องประเมินคุณลักษณะที่คุณต้องการจากตัวเลือกวิธีการบีบอัดของคุณและพิจารณาบริบทที่จะใช้

คุณสมบัติและข้อควรพิจารณาที่แตกต่างกัน ได้แก่ :

  • ความสามารถในการบีบอัด - มันลดขนาดไฟล์อย่างมีนัยสำคัญเพียงพอหรือไม่?
  • ความง่ายในการใช้งาน - หากไฟล์กำลังจะไปยังผู้ใช้คนอื่นไฟล์เก็บถาวรจะแตกง่ายหรือต้องติดตั้งซอฟต์แวร์เพิ่มเติมหรือไม่
  • การป้องกันด้วยรหัสผ่านและ / หรือการเข้ารหัส - จำเป็นต้องมีมาตรการรักษาความปลอดภัยเหล่านี้หรือไม่
  • รองรับหลายวอลุ่ม - หากสื่อเป้าหมายต้องการให้ไฟล์ถูกแบ่งออกเป็นส่วน ๆ ที่เหมาะสมรูปแบบจะสนับสนุนสิ่งนี้อย่างหรูหรา ตัวอย่างเช่น 650 MB สำหรับซีดี
  • การซ่อมแซมและการกู้คืน - หากไฟล์เกิดความเสียหายเพียงบางส่วนจะมีเรคคอร์ดการกู้คืนเพื่อช่วยในการกู้คืนข้อมูล
  • สนับสนุน Unicode - Archiver รองรับชื่อไฟล์สากลหรือเพียงแค่ ASCII มาตรฐานหรือไม่
  • ความต้องการของระบบ - คอมเพรสเซอร์ที่ทันสมัยเช่น7-Zipนำเสนอความสามารถในการเพิ่มประสิทธิภาพการบีบอัดโดยใช้พจนานุกรมที่มีขนาดใหญ่กว่า (พจนานุกรมคือการอ้างอิงข้อมูลซ้ำทั่วไปในไฟล์บีบอัด) แต่สิ่งนี้จะเพิ่มการใช้หน่วยความจำทั้งในการบีบอัดและ เวลาในการบีบอัด
  • การสนับสนุนการแตกไฟล์ด้วยตนเอง - สามารถจัดเก็บลงสื่อถาวรในไฟล์เรียกทำงานที่ให้ความสะดวกในการใช้งานกับทุกคนที่ต้องการใช้งานหรือไม่? (โปรดจำไว้ว่าคุณสามารถสร้าง self-extractor สำหรับแพลตฟอร์มเดียวเท่านั้นโดยทั่วไปการพูด Windows self-extractor จะไม่ทำงานบน Linux โดยค่าเริ่มต้นยกเว้นว่าจะทำงานผ่านเลเยอร์ความเข้ากันได้เช่นไวน์)
  • คุณลักษณะของระบบไฟล์ - คอมเพรสเซอร์เก็บข้อมูลเมตาของระบบไฟล์ที่เกี่ยวข้องและการอนุญาตที่อาจคุ้มค่าที่จะต้องแยกออกหรือไม่?

โดยทั่วไปการพูดZIPเป็นรูปแบบที่แพร่หลายมากที่สุด แต่ขนาดไม่เกิน 4 GB ไม่รองรับ (โดยทั่วไป) การรักษาความปลอดภัยโดยทั่วไปถือว่าไม่ดี (รหัสผ่านมาตรฐานสามารถถูกโจมตีด้วยการโจมตีแบบข้อความธรรมดาและการเข้ารหัสเพิ่มเติมคือ ดำเนินการโดยทั่วไปว่าเป็นอนุพันธ์ทางการของรูปแบบโดยผู้ค้าซอฟต์แวร์ ZIP เชิงพาณิชย์)

นอกจากนั้นรูปแบบที่นิยมอื่น ๆ ส่วนใหญ่จะมีรูปแบบการสนับสนุนบางส่วนในทุกระบบปฏิบัติการโดยการติดตั้งซอฟต์แวร์เพิ่มเติม

ทางเลือกส่วนตัวของฉันคือ7-Zipเนื่องจากมันมีการบีบอัดที่ดีและยืดหยุ่น แม้จะมีส่วนติดต่อผู้ใช้เฉพาะบน Windows มีตัวบีบอัดสำหรับ Linux และ Mac OS X (แม้ว่าจะไม่ใช่ GUI ตามมาตรฐาน)


3
หากไฟล์เก็บถาวรนั้นมีไว้สำหรับการเผยแพร่เป็นสิ่งสำคัญที่จะต้องพิจารณากลุ่มเป้าหมายของคุณและใช้รูปแบบที่สนับสนุนโดยค่าเริ่มต้นบนแพลตฟอร์มของพวกเขา การช่วยสำหรับการเข้าถึงอาจมีความสำคัญมากกว่าข้อควรพิจารณาอื่น ๆ ในกรณีนี้
hammar

+1 ขอบคุณสำหรับข้อมูลที่แม้ว่ามันจะได้รับที่ดียิ่งขึ้นที่จะกล่าวถึงซึ่งรูปแบบการสนับสนุนจุด bullet เหล่านั้น :)
Mehrdad

ฉันถูกล่อลวง แต่มีรูปแบบให้เลือกมากมายซึ่งจะใช้เวลานานในการเขียนรายการ Wikipedia มีเมทริกซ์ฟีเจอร์ที่ดีของรูปแบบการบีบอัดซึ่งอาจช่วยได้: en.wikipedia.org/wiki/Comparison_of_archive_formats
Ruairi Fullam

1
ประวัติสอนบทเรียนที่สำคัญเมื่อพูดถึงการแยกไฟล์เก็บถาวรด้วยตนเอง มีคลังเก็บข้อมูลแบบขยายตัวเองเมื่อสองทศวรรษที่แล้วที่ผู้คนไม่สามารถแยกตัวเองได้อีกต่อไปเพราะเครื่องของพวกเขาไม่สามารถเรียกใช้โปรแกรม MS / PC-DOS หรือเนื่องจากโปรแกรมตัวแยกชุดทำงานผิดพลาดเนื่องจากการเปลี่ยนแปลงของโปรเซสเซอร์หรือเนื่องจากตัว ตัวแยกข้อมูลบ่นว่าดิสก์เต็มเมื่อพวกเขาไม่ได้เพราะพวกเขาไม่คาดหวังว่าดิสก์จะมีขนาดใหญ่มากหรือ ...
JdeBP

ประเด็นนั้นเป็นที่ถกเถียงกันอย่างแน่นอนฉันไม่พบปัญหานั้น แต่ฉันเห็นว่ามันเกิดขึ้น ฉันคิดว่ามันเป็นคำถามของเป้าหมายสุดท้ายของการสร้างไฟล์เก็บถาวรและอายุการใช้งานของไฟล์ที่คาดหวัง แน่นอนว่าถ้าคุณมีไฟล์เก็บถาวรเก่าที่ยากต่อการแยกจากยุค DOS คุณสามารถใช้ DOSBox หรือสร้าง VM ถ้าจำเป็น
Ruairi Fullam

8

สิ่งหนึ่งที่อยู่ในใจคือโพสต์บล็อก (อายุสองปี) จาก Jeff Atwood: การบีบอัดไฟล์ในยุคมัลติคอร์ ในบทความนั้นเขาพบว่า bzip2 มีประสิทธิภาพเหนือกว่า 7-zip เมื่อทำงานมากกว่าสองคอร์


+1 omg! ฉันไม่รู้ อัตราส่วนการบีบอัดดูเหมือนจะไม่คุ้มค่า :)
Mehrdad

2
โพสต์นั้นมีอายุมากกว่า 2 ปี 7-zip ทำงานได้ดีขึ้นด้วยแกนมากกว่าสองแกนตอนนี้หรือไม่
cregox

BZIP2 บีบอัดได้อย่างมีประสิทธิภาพมากกว่าหลายแกนเพราะมันบีบอัดลงในบล็อก 100-900KB จึงสามารถแพร่กระจายบล็อกมากกว่าแกนที่แยกจากกัน แต่ประสิทธิภาพการบีบอัดจะหายไปเนื่องจากบล็อกเหล่านี้จะแตกต่างจากกัน
Ruairi Fullam

4

สำหรับคำถามแรกของคุณ 7-Zip เป็นผู้จัดเก็บที่สามารถใช้อัลกอริทึมมากมายในการบีบอัดและคลายการบีบอัดข้อมูล

สำหรับคำถามที่สองของคุณตรวจสอบให้แน่ใจว่าแพลตฟอร์มรองรับเครื่องมือที่สนับสนุนรูปแบบที่กำหนด ตัวอย่างเช่นฉันจะหลีกเลี่ยงการใช้RARบน Mac ในขณะที่มันเป็นไปได้ที่จะใช้และมียูทิลิตี้ฟรีที่สนับสนุนพวกเขาขาดอินเทอร์เฟซที่สมบูรณ์ยิ่งขึ้นที่อรรถประโยชน์ของ Windows ที่สนับสนุน RAR มี (จากประสบการณ์ของฉัน)


ในขณะที่ฉันเกลียดโปรแกรม rar กราฟิกและใช้บรรทัดคำสั่งเสมอแม้บน Windows
CarlF

4

ตามที่คนอื่น ๆ ได้กล่าวถึงการเลือกรูปแบบการบีบอัดเฉพาะขึ้นอยู่กับการใช้งานและกลุ่มเป้าหมาย

  • ไฟล์. tar.gz และ tar.bz2 เหมาะสำหรับการใช้งานบนระบบ Linux (และโดยส่วนขยายสำหรับการแชร์ไฟล์กับผู้ใช้ Linux) เนื่องจากเครื่องมือ tar, gzip และ bzip2 นั้นแพร่หลายในแพลตฟอร์มและเนื่องจากรูปแบบ. tar มีความสมบูรณ์ สนับสนุนสิทธิ์ Unix และคุณสมบัติเฉพาะแพลตฟอร์มอื่น ๆ ตัวเลือกระหว่าง gzip และ bzip2 เพื่อบีบอัดไฟล์เก็บถาวร tar นั้นส่วนใหญ่เป็นการตัดสินใจเกี่ยวกับความเร็วและอัตราส่วนการบีบอัดโดยที่ bzip2 ส่งไฟล์ขนาดเล็ก แต่มีความเร็วในการบีบอัดที่ช้ากว่ามาก ข้อเสียของรูปแบบเหล่านี้รวมถึงความเข้ากันได้น้อยกับ Windows และความต้องการ (ที่อาจเกิดขึ้น) เพื่อคลายการบีบอัดไฟล์เก็บถาวรทั้งหมดเพื่อแยกไฟล์เดียว

  • สามารถแยกไฟล์ ZIP ได้บนแพลตฟอร์มส่วนใหญ่โดยใช้เครื่องมือดั้งเดิมดังนั้นจึงเป็นตัวเลือกที่เหมาะอย่างยิ่งสำหรับการส่งไฟล์เก็บถาวรไปยังผู้ใช้ที่ไม่ใช่ด้านเทคนิคซึ่งจะอึดอัดกับการติดตั้งซอฟต์แวร์เก็บถาวรของบุคคลที่สามเช่น ระดับการบีบอัดไม่ดีเท่าอัลกอริธึมขั้นสูงและไม่รองรับสิทธิ์ Unix แต่เป็นรูปแบบที่ยอดเยี่ยมหากคุณต้องการส่งไฟล์เก็บภาพถ่ายวันหยุดไปยังคุณยายของคุณ ZIP ยังมีการป้องกันด้วยรหัสผ่านพื้นฐานและสามารถแตกไฟล์ได้อย่างรวดเร็วจากที่ใดก็ได้ในไฟล์เก็บถาวร

  • 7-Zip นั้นดีถ้าคุณต้องการอัตราส่วนการบีบอัดที่ดีที่สุด เช่นเดียวกับ ZIP มันไม่รองรับการอนุญาตให้ใช้ไฟล์ Unix หรือการเป็นเจ้าของและยังไม่ได้ติดตั้งตามค่าเริ่มต้นบนแพลตฟอร์มส่วนใหญ่ซึ่งทำให้ใช้งานได้มากกว่าเดิมเล็กน้อย แต่มันอาจจะคุ้มค่าสำหรับ Windows ในทุกสภาวะแวดล้อมลีนุกซ์จะดีกว่าถ้าใช้เครื่องมือบีบอัด 'xz' หรือ 'lzma' พร้อมกับ tar ซึ่งทำงานในลักษณะเดียวกับ 'gzip' และ 'bzip2' แต่ใช้อัลกอริธึม LZMA ขั้นสูงเช่น 7 -Zip


2

เช่นเดียวกับตัวอย่างฉันใช้รูปแบบที่กล่าวถึงในกรณีเหล่านี้:

  • ไฟล์ข้อความ (บันทึกโดยเฉพาะ): bz2
  • การรวบรวมไฟล์ที่จะแจกจ่าย (เช่นซอร์สโค้ด): gz (tar.gz จริงๆ)
  • ไฟล์สารพัน: 7zip ฉันสามารถบีบอัดเกือบทุกอย่างในวิธีที่มีประสิทธิภาพมาก การเข้ารหัสข้ามแพลตฟอร์มโอเพ่นซอร์สเสถียรน้ำหนักเบา (ส่วนหัวและข้อมูล), ... คุณขออะไรอีกมั้ย :)

ฉันหลีกเลี่ยง RARโดยสิ้นเชิงและเมื่อใดก็ตามที่ฉันได้รับไฟล์ RAR จากคนที่ฉันรู้จักฉันบอกให้เขา / เธอหยุดใช้รูปแบบนั้นเนื่องจากมันเป็นงานที่ยอดเยี่ยมและอาจเป็นไปได้ว่าเขา / เธอกำลังใช้ซอฟต์แวร์ที่ไม่มีใบอนุญาต มันตลอดไป)

PS: ฉันเรียกใช้ Ubuntu (เป็นหลัก) และ Windows (ทั้งบูตคู่และ VirtualBox)


1

มีงานที่แยกกันอย่างน้อยสี่งานที่มักจะสับสนเพราะเครื่องมือยอดนิยมรวมเข้าด้วยกัน:

  1. การเก็บถาวร: ความสามารถในการรวมหลายไฟล์ (รวมถึงข้อมูลเมตา) เป็นไฟล์เดียวโดยเก็บรักษาสิ่งต่าง ๆ ให้มากที่สุด ในโลก Linux / Unix การเก็บถาวรจะทำในรูปแบบไฟล์ TAR
  2. การบีบอัด: ความสามารถในการลดขนาดของกระแสข้อมูลไบนารีแบบไม่ลดทอน ในโลก Linux / Unix สิ่งนี้ทำโดย GZip และ BZip2
  3. การเข้ารหัส: ความสามารถในการช่วงชิงข้อมูลด้วยปุ่ม
  4. Checksum: ความสามารถในการตรวจสอบข้อผิดพลาด (และอาจแก้ไขได้)

ubiquity of .tar.gz และ. tar.bz สอดคล้องกับปรัชญา Unix ของเครื่องมือขนาดเล็กที่ทำงานได้ดีเพียงงานเดียวโดยใช้เครื่องมือเดียวที่ทำทุกอย่าง รูปแบบไฟล์ TAR ไม่รองรับการบีบอัดหรือการเข้ารหัส แต่สามารถบีบอัดเพิ่มเติมได้โดยคอมเพรสเซอร์ใด ๆ (รวมถึง. tar.zip หรือ. tar.7z) งานของ GZip และ BZip2 นั้นง่าย ๆ ในการบีบอัดไฟล์สตรีมไปยัง filestream อีกชั้นเลเยอร์การบีบอัดไม่จำเป็นต้องสนใจวิธีรักษา metadata หรือการเข้ารหัส เมื่อเวลาผ่านไปมีการใช้ทางลัดหลายอย่างในtarโปรแกรมเพื่อทำงานกับคอมเพรสเซอร์ได้สะดวกยิ่งขึ้น

ในรูปแบบไฟล์ zip และ 7z งานแยกเหล่านี้จะกระทำโดยโปรแกรมเดียวในรูปแบบไฟล์ super เดียว

ทำไมเทรนด์ดังกล่าวถึงถือแม้ว่าทั้งหมดเหล่านี้เป็นรูปแบบพกพา มีข้อได้เปรียบอะไรเป็นพิเศษหรือไม่ในการใช้รูปแบบไฟล์เก็บถาวรเฉพาะบนแพลตฟอร์มเฉพาะ

เนื่องจากมันเป็นวิธีการที่ทำเสร็จแล้วซอร์สโค้ดของโปรแกรมจึงถูกแจกจ่ายแบบดั้งเดิมเช่น. tar.gz หรือ. tar.bz2 เนื่องจากการสงวนสิทธิ์ของไฟล์เวลาในการแก้ไข ฯลฯ เป็นสิ่งสำคัญสำหรับเครื่องมือต่าง ๆ ที่ใช้สำหรับการเขียนโปรแกรม (เช่น make)

ขั้นตอนการบีบอัดและการบีบอัดแยกต่างหากทำงานได้ดีมากในปีที่ผ่านมามันมีข้อได้เปรียบที่ชัดเจนว่าสามารถผสมและจับคู่เอกสารและการบีบอัดได้อย่างอิสระและข้อเสียของมัน (กระบวนการบีบอัด 2 ขั้นตอน) สามารถหลีกเลี่ยงได้ง่าย โปรแกรมบีบอัด linux ที่ทันสมัยที่สุดจะบีบอัดโดยตรงไปยัง. tar.gz หรือ. tar.bz2 ซึ่งซ่อนขั้นตอนกลางไว้)

ไม่มีเหตุผลที่ดีที่จะย้ายไปยังรูปแบบไฟล์อื่น ๆ คอมเพรสเซอร์ที่ใหม่กว่าไม่มีอัตราการบีบอัดที่ดีกว่าอย่างมีนัยสำคัญเพื่อแสดงให้เห็นถึงการทำลายประเพณีและน้ำมันดินสามารถรักษาทุกอย่างได้ดีพอ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.