क्यों जिप सक्षम एक ही सामग्री के साथ एकाधिक फ़ाइलों की तुलना में बेहतर एकल फ़ाइलों को संपीड़ित करने के लिए है?
अपनी फ़ाइलों को संपीड़ित करने में सक्षम होने के कारण, ताकि उन्हें साझा करना और / या परिवहन करना आसान हो, हमारे इलेक्ट्रॉनिक जीवन को बहुत आसान बना सकते हैं, लेकिन कभी-कभी हम उन्हें संक्षिप्त करने के बाद अजीब या अप्रत्याशित परिणाम देख सकते हैं। ऐसा क्यों है? आज के SuperUser Q & A पोस्ट में एक भ्रमित पाठक के सवालों के जवाब हैं.
आज का प्रश्न और उत्तर सत्र सुपरयूज़र के सौजन्य से आता है-स्टैक एक्सचेंज का एक उपखंड, क्यू एंड ए वेब साइटों का एक समुदाय-संचालित समूह है।.
जीन-एटिने मिन्ह-ड्यू पोइरियर (फ़्लिकर) के सौजन्य से फोटो.
प्रश्न
सुपरयूजर रीडर सिक्सटफुटर्सड्यूड जानना चाहता है कि क्यों जिप एक ही प्रकार की सामग्री वाली कई फाइलों की तुलना में एकल फाइलों को बेहतर तरीके से संपीड़ित करने में सक्षम है:
मान लीजिए कि मेरे पास 10,000 XML फाइलें हैं और मैं उन्हें एक दोस्त को भेजना चाहता हूं। उन्हें भेजने से पहले, मैं उन्हें संक्षिप्त करना चाहूंगा.
विधि 1: उन्हें संपीड़ित न करें
परिणाम:
विधि 2: प्रत्येक फ़ाइल को अलग से ज़िप करें और उसे 10,000 ज़िप्ड XML फ़ाइलें भेजें
कमान:
परिणाम:
विधि 3: सभी 10,000 XML फ़ाइलों से युक्त एक एकल ज़िप फ़ाइल बनाएँ
कमान:
परिणाम:
विधि 4: एकल फ़ाइल और ज़िप में फ़ाइलों को समाप्त करें
कमान:
परिणाम:
प्रशन
- जब मैं सिर्फ एक फाइल को जिप कर रहा होता हूं तो मुझे नाटकीय रूप से बेहतर परिणाम क्यों मिलते हैं?
- मैं विधि 2 के बजाय विधि 3 का उपयोग करके बहुत बेहतर परिणाम प्राप्त करने की उम्मीद कर रहा था, लेकिन मैं नहीं करता। ऐसा क्यों है?
- क्या यह व्यवहार ज़िप के लिए विशिष्ट है? अगर मैंने Gzip का उपयोग करने की कोशिश की, तो क्या मुझे अलग परिणाम मिलेंगे?
अतिरिक्त जानकारी
मेटा डेटा
दिए गए उत्तरों में से एक सुझाव है कि अंतर सिस्टम मेटा डेटा है जो ज़िप फ़ाइल में संग्रहीत है। मुझे विश्वास नहीं है कि यह मामला हो सकता है। इसका परीक्षण करने के लिए, मैंने निम्नलिखित कार्य किया:
परिणामस्वरूप ज़िप फ़ाइल 1.4 एमबी है। इसका मतलब है कि अभी भी लगभग दस एमबी अस्पष्टीकृत स्थान है.
ज़िप एक ही प्रकार की सामग्री के साथ एकाधिक फ़ाइलों से बेहतर एकल फ़ाइलों को संपीड़ित करने में सक्षम क्यों है?
उत्तर
सुपरयूजर योगदानकर्ता एलन शटको और अगंजु का जवाब हमारे लिए है। सबसे पहले, एलन शटको:
ज़िप संपीड़न संपीड़ित होने के लिए डेटा में दोहराए जाने वाले पैटर्न पर आधारित है, और संपीड़न बेहतर हो जाता है कि फ़ाइल जितनी लंबी हो, उतनी अधिक और लंबी पैटर्न मिल सकती है और इसका उपयोग किया जा सकता है.
सरलीकृत, यदि आप एक फ़ाइल को संक्षिप्त करते हैं, तो शब्दकोश जो (छोटे) कोड्स को मैप करता है (लंबी) पैटर्न आवश्यक रूप से प्रत्येक परिणामी ज़िप फ़ाइल में निहित है; यदि आप एक लंबी फ़ाइल को ज़िप करते हैं, तो शब्दकोश 'पुन: उपयोग' किया जाता है और सभी सामग्री में और भी अधिक प्रभावी होता है.
यदि आपकी फ़ाइलें थोड़ी समान हैं (जैसा कि पाठ हमेशा होता है), 'शब्दकोश' का पुन: उपयोग बहुत ही कुशल हो जाता है और परिणाम बहुत छोटा कुल ज़िप फ़ाइल होता है.
अगंजु के उत्तर का अनुसरण:
ज़िप में, प्रत्येक फ़ाइल को अलग से संपीड़ित किया जाता है। विपरीत है ठोस संपीड़न, अर्थात्, फ़ाइलें एक साथ संपीड़ित होती हैं। 7-ज़िप और आरएआर डिफ़ॉल्ट रूप से ठोस संपीड़न का उपयोग करते हैं। Gzip और Bzip2 कई फ़ाइलों को संपीड़ित नहीं कर सकते हैं, इसलिए टार का उपयोग पहले किया जाता है, जिसमें ठोस संपीड़न के समान प्रभाव होता है.
चूंकि xml फ़ाइलों में समान संरचना (और शायद समान सामग्री) होती है, अगर फाइलें एक साथ संकुचित होती हैं तो संपीड़न अधिक होगा.
उदाहरण के लिए, यदि किसी फ़ाइल में स्ट्रिंग है ”
"और कंप्रेसर ने पहले से ही उस स्ट्रिंग को किसी अन्य फ़ाइल में पाया है, यह इसे एक छोटे पॉइंटर के साथ पिछले मैच में बदल देगा। यदि कंप्रेसर ठोस संपीड़न का उपयोग नहीं करता है, तो फ़ाइल में स्ट्रिंग की पहली घटना को ए के रूप में दर्ज किया जाएगा शाब्दिक, जो बड़ा है.
स्पष्टीकरण में कुछ जोड़ना है? टिप्पणियों में विचार व्यक्त करो। अन्य टेक-सेवी स्टैक एक्सचेंज उपयोगकर्ताओं से अधिक उत्तर पढ़ना चाहते हैं? पूरी चर्चा धागा यहाँ देखें.