-
ไฟล์ที่สร้างด้วย
tarfileของ Python มีขนาดเล็กกว่าไฟล์ที่สร้างด้วยtarบน macOS ถึง 15 เท่า -
สาเหตุ:
tarแบบ BSD/GNU ใส่ไฟล์ลงในไฟล์บีบอัดโดยไม่เรียงลำดับ จึงอาจทำให้อัตราการบีบอัดแย่ลงได้ขึ้นอยู่กับประเภทของไฟล์
→ ฟังก์ชัน tarfile ของ Python เรียงลำดับเป็นค่าเริ่มต้น
- ในกรณีของ GNU
tarสามารถใช้ตัวเลือก--sortเพื่อเรียงตามname/inodeก่อนใส่ได้ → เมื่อใช้การเรียงลำดับแล้วจะได้อัตราการบีบอัดเท่ากัน
4 ความคิดเห็น
ผมยังไม่ค่อยเข้าใจเท่าไร ทำไมพอใช้การจัดเรียงแล้วอัตราการบีบอัดถึงเปลี่ยนไปล่ะ ทั้งที่อัตราการบีบอัดของแต่ละไฟล์ก็น่าจะเท่าเดิม
อัลกอริทึมที่ใช้อยู่คือ Deflate ครับ ซึ่งจะเก็บข้อมูลที่เคยใช้ในการบีบอัดไว้ใน sliding window สมมติว่าครั้งนี้ประมวลผลไป 10 ไบต์ ข้อมูล 10 ไบต์ที่ประมวลผลในรอบนี้ก็จะถูกเพิ่มต่อท้ายใน sliding window และขนาดของ sliding window จะคงที่
เมื่อพบเนื้อหาที่เหมือนกับสิ่งที่อยู่ใน sliding window ก็จะบีบอัดโดยเขียน LLD (Literal, Length, Distance) แทน โดย Distance คือเริ่มตรงไหนใน sliding window ที่มีเนื้อหาเหมือนกัน, Length คือความยาวของส่วนที่เหมือนกันใน sliding window, และ Literal คืออักขระตัวแรกที่ไม่เหมือนกัน
Deflate ให้ความสำคัญกับสิ่งที่เก็บอยู่ใน sliding window ดังนั้นการเพิ่งเห็นเนื้อหาที่คล้ายกันมาก่อนหรือไม่จึงสำคัญ และถ้าได้เห็นไฟล์ที่คล้ายกันมาก่อน ก็มีโอกาสที่จะบีบอัดได้ดีขึ้น
วิธีการบีบอัดเป็นอย่างไร โปรดดูสไลด์ด้านล่าง (gzip ก็อิงตาม Deflate เช่นกัน)
https://speakerdeck.com/dalinaum/…
เนื้อหาของไฟล์ที่มีชื่อเหมือนกันหรือคล้ายกันภายในโฟลเดอร์เดียวกันน่าจะคล้ายกันด้วย จึงมีแนวโน้มที่จะบีบอัดได้ดีกว่า
ดูเหมือนว่าความหมายคือ ช่วงที่ใช้ค้นหาสิ่งที่เหมือนกันระหว่างการบีบอัดไม่ได้กว้างมากนัก ดังนั้นถ้าจัดเรียงไฟล์ ก็มีโอกาสสูงขึ้นที่ไฟล์ที่คล้ายกันเหล่านี้จะถูกรวมอยู่ใกล้กันและถูกบีบอัดได้