เหตุใด Zip จึงสามารถบีบอัดไฟล์เดี่ยวได้ดีกว่าหลาย ๆ ไฟล์ที่มีเนื้อหาเดียวกัน
ความสามารถในการบีบอัดไฟล์ของเราเพื่อให้การแบ่งปันและ / หรือการขนส่งง่ายขึ้นสามารถทำให้ชีวิตอิเล็คทรอนิคส์ของเราง่ายขึ้นมาก แต่บางครั้งเราอาจเห็นผลลัพธ์ที่แปลกหรือไม่คาดคิดหลังจากเราบีบอัดไฟล์ ทำไมถึงเป็นอย่างนั้น? คำถาม & คำตอบ SuperUser ของวันนี้มีคำตอบสำหรับคำถามของผู้อ่านที่สับสน.
เซสชั่นคำถามและคำตอบในวันนี้มาถึงเราด้วยความอนุเคราะห์จาก SuperUser - แผนกย่อยของ Exchange Exchange ซึ่งเป็นกลุ่มที่ขับเคลื่อนด้วยชุมชนของเว็บไซต์ถาม - ตอบ.
ภาพถ่ายมารยาทของ Jean-Etienne Minh-Duy Poirrier (Flickr).
คำถาม
ผู้อ่าน SuperUser sixtyfootersdude ต้องการทราบว่าเหตุใด zip จึงสามารถบีบอัดไฟล์เดียวได้ดีกว่าหลาย ๆ ไฟล์ที่มีเนื้อหาประเภทเดียวกัน:
สมมติว่าฉันมีไฟล์ XML 10,000 ไฟล์และต้องการส่งให้เพื่อน ก่อนที่จะส่งพวกเขาฉันต้องการที่จะบีบอัดพวกเขา.
วิธีที่ 1: อย่าบีบอัดข้อมูลเหล่านั้น
ผล:
วิธีที่ 2: บีบอัดไฟล์ทุกไฟล์แยกจากกันและส่งไฟล์ XML ที่ซิป 10,000 ไฟล์ให้เขา
คำสั่ง:
ผล:
วิธีที่ 3: สร้างไฟล์ซิปเดี่ยวที่มีไฟล์ XML ทั้งหมด 10,000 ไฟล์
คำสั่ง:
ผล:
วิธีที่ 4: เชื่อมไฟล์เข้าด้วยกันเป็นไฟล์เดียวแล้วทำการซิป
คำสั่ง:
ผล:
คำถาม
- ทำไมฉันถึงได้ผลลัพธ์ที่ดีขึ้นอย่างมากเมื่อฉันเพิ่งซิปไฟล์เดียว?
- ฉันคาดหวังว่าจะได้ผลลัพธ์ที่ดีขึ้นอย่างมากโดยใช้วิธีที่ 3 แทนที่จะเป็นวิธีที่ 2 แต่ฉันทำไม่ได้ ทำไมเป็นแบบนี้?
- พฤติกรรมนี้ใช้เฉพาะกับรหัสไปรษณีย์หรือไม่ ถ้าฉันลองใช้ Gzip ฉันจะได้ผลลัพธ์ที่แตกต่างกันหรือไม่?
ข้อมูลเพิ่มเติม
ข้อมูลเมตา
หนึ่งในคำตอบที่ระบุชี้ให้เห็นว่าความแตกต่างคือข้อมูลเมตาของระบบที่เก็บไว้ในไฟล์ zip ฉันไม่เชื่อว่านี่เป็นกรณี เพื่อทดสอบฉันทำต่อไปนี้:
ไฟล์ zip ที่ได้คือ 1.4 MB ซึ่งหมายความว่ายังคงมีพื้นที่ที่ไม่ได้อธิบายประมาณสิบ MB.
เหตุใด zip จึงสามารถบีบอัดไฟล์เดียวได้ดีกว่าหลายไฟล์ที่มีเนื้อหาประเภทเดียวกัน?
คำตอบ
Alan Shutko และ Aganju ผู้มีส่วนร่วมสูงสุดได้รับคำตอบสำหรับเรา ก่อนอื่น Alan Shutko:
การบีบอัด Zip ขึ้นอยู่กับรูปแบบซ้ำ ๆ ในข้อมูลที่จะบีบอัดและการบีบอัดจะดีขึ้นเมื่อไฟล์ยาวขึ้นเนื่องจากสามารถพบและใช้รูปแบบได้มากขึ้น.
ประยุกต์ได้ง่ายกว่าถ้าคุณบีบอัดไฟล์หนึ่งไฟล์พจนานุกรมที่แมปรหัส (สั้น) กับรูปแบบ (อีกต่อไป) จำเป็นต้องมีอยู่ในไฟล์ zip ที่ได้ หากคุณซิปไฟล์ยาวหนึ่งไฟล์พจนานุกรมจะถูก 'นำกลับมาใช้ใหม่' และจะมีประสิทธิภาพมากขึ้นในเนื้อหาทั้งหมด.
หากไฟล์ของคุณคล้ายกันเล็กน้อย (ตามที่เป็นข้อความเสมอ) การนำ 'พจนานุกรม' กลับมาใช้ใหม่จะมีประสิทธิภาพมากและผลลัพธ์จะเป็นไฟล์ zip ทั้งหมดที่เล็กกว่ามาก.
ตามด้วยคำตอบจาก Aganju:
ในไฟล์ zip แต่ละไฟล์จะถูกบีบอัดแยกกัน สิ่งที่ตรงกันข้ามคือ การบีบอัดที่เป็นของแข็ง, นั่นคือไฟล์ถูกบีบอัดเข้าด้วยกัน 7-zip และ Rar ใช้การบีบอัดแบบ solid ตามค่าเริ่มต้น Gzip และ Bzip2 ไม่สามารถบีบอัดไฟล์ได้หลายไฟล์ดังนั้น Tar จะถูกใช้ก่อนมีผลเหมือนกับการบีบอัดที่เป็นของแข็ง.
เนื่องจากไฟล์ xml มีโครงสร้างที่คล้ายกัน (และอาจมีเนื้อหาที่คล้ายกัน) หากไฟล์ถูกบีบอัดเข้าด้วยกันการบีบอัดจะสูงขึ้น.
ตัวอย่างเช่นหากไฟล์มีสตริง“
” และคอมเพรสเซอร์พบแล้วว่าสตริงในไฟล์อื่นมันจะแทนที่ด้วยตัวชี้ขนาดเล็กเพื่อการแข่งขันก่อนหน้า หากคอมเพรสเซอร์ไม่ได้ใช้การบีบอัดแบบแข็งการเกิดขึ้นครั้งแรกของสตริงในไฟล์จะถูกบันทึกเป็น ตามตัวอักษร, ซึ่งมีขนาดใหญ่กว่า.
มีสิ่งที่จะเพิ่มคำอธิบายหรือไม่ ปิดเสียงในความคิดเห็น ต้องการอ่านคำตอบเพิ่มเติมจากผู้ใช้ Stack Exchange คนอื่นหรือไม่ ลองอ่านหัวข้อสนทนาเต็มได้ที่นี่.