Python से बनाई गई tar.xz फ़ाइलें डिफ़ॉल्ट tar से बनी फ़ाइलों से छोटी क्यों होती हैं?
(superuser.com)-
Python के
tarfileफ़ंक्शन से बनी फ़ाइल की तुलना में macOStarसे बनी फ़ाइल 15 गुना बड़ी निकली -
कारण: BSD/GNU
tarcompressed file के अंदर फ़ाइलों ko बिना किसी क्रम के रखता है, इसलिए फ़ाइलों के प्रकार के आधार पर compression ratio कम हो सकता है
→ Python का tarfile फ़ंक्शन डिफ़ॉल्ट रूप से sort करता है
- GNU
tarमें--sortविकल्प के साथname/inodeक्रम में sort करके जोड़ना संभव है → sort लागू करने पर वही compression ratio मिलता है
4 टिप्पणियां
मुझे थोड़ा समझ नहीं आ रहा, लेकिन sorting लागू करने से compression ratio क्यों बदल जाता है? हर individual file का compression ratio तो एक जैसा ही होगा।
जो algorithm इस्तेमाल हो रहा है, वह Deflate है। यह पहले compression में इस्तेमाल की गई सामग्री को sliding window में रखता है। अगर इस बार 10 bytes प्रोसेस किए गए हैं, तो अभी प्रोसेस किए गए 10 bytes sliding window के आखिर में जुड़ जाते हैं, और sliding window का size fixed रहता है.
अगर sliding window में मौजूद सामग्री जैसा ही कोई हिस्सा मिल जाता है, तो उसे compression के लिए LLD (Literal, Length, Distance) लिखकर दर्शाया जाता है। Distance बताता है कि sliding window में किस जगह से वही सामग्री शुरू होती है, Length बताता है कि sliding window में वही सामग्री कितनी लंबी है, और Literal वह पहला अक्षर है जो समान नहीं है.
Deflate में यह महत्वपूर्ण है कि sliding window में क्या रखा है, इसलिए यह मायने रखता है कि क्या ठीक पहले मिलती-जुलती सामग्री देखी गई थी। अगर पहले कोई similar file देखी गई हो, तो compression बेहतर होने की संभावना बढ़ जाती है.
यह किस तरीके से compress होता है, इसके लिए नीचे की स्लाइड्स देखें। (
gzipभी Deflate-आधारित है.)https://speakerdeck.com/dalinaum/…
एक ही फ़ोल्डर के भीतर समान या मिलते-जुलते नाम वाली फ़ाइलों की सामग्री भी अक्सर मिलती-जुलती होती है, इसलिए compression ratio ज़्यादा अच्छा हो सकता है,
और लगता है कि बात यह है कि compress करते समय ऐसी समान चीज़ों को खोजने की सीमा बहुत व्यापक नहीं होती, इसलिए अगर फ़ाइलों को sort कर दिया जाए तो ऐसी मिलती-जुलती फ़ाइलें पास आ जाती हैं और उनके साथ compress होने की संभावना बढ़ जाती है।