ऐसी ही कई बड़ी फाइलों को समेटना


18

मेरे पास इसी तरह की सैकड़ों बड़ी फाइलें (30 मेगाबाइट प्रत्येक) हैं जिन्हें मैं कंप्रेस करना चाहता हूं। फ़ाइलों की प्रत्येक जोड़ी में समान डेटा का 99% (कम 1% अंतर) है, इसलिए मुझे 40-50 मेगाबाइट संग्रह से अधिक नहीं होने की उम्मीद है।

एकल फ़ाइल 13-15 एमबी करने के लिए 30 एमबी से संकुचित किया जा सकता है (के साथ xz -1, gz -1, bzip2 -1), लेकिन जब दो या अधिक फ़ाइलों को संपीड़ित मैं आकार के साथ संग्रह करना चाहते हैं 13-15MB + N*0.3MBजहां एन फ़ाइलों की संख्या है।

उपयोग करते समय tar(ठोस संग्रह बनाने के लिए) और xz -6(एक फ़ाइल से बड़ा होने के लिए संपीड़न शब्दकोश को परिभाषित करने के लिए - अपडेट - यह पर्याप्त नहीं था! ), मेरे पास अभी भी आकार के साथ संग्रह है N*13MB

मुझे लगता है कि दोनों लगता है gzipऔर bzip2मुझे मदद नहीं करेगा क्योंकि वे एमबी 1 से भी कम समय शब्दकोश है, और मेरी टार धारा पुनरावृत्ति हर 30 एमबी है।

मैं मानक उपकरणों का उपयोग करके आधुनिक लिनक्स में अपनी समस्या को कैसे संग्रहीत कर सकता हूं?

क्या xzतेजी से संपीड़ित करने के लिए धुन करना संभव है , लेकिन 30-60 एमबी से बड़ा शब्दकोश का उपयोग करें?

अद्यतन : के साथ चाल चली tar c input_directory | xz --lzma2=dict=128M,mode=fast,mf=hc4 --memory=2G > compressed.tar.xz। आवश्यक mf=hc4और --memory=2Gविकल्पों के बारे में निश्चित नहीं ; लेकिन dict=128Mशब्दकोश को काफी बड़ा (एक फ़ाइल से बड़ा) होने के लिए सेट करें, और mode=fastइस प्रक्रिया को थोड़ा तेज करें -e


रनिंग xz -1 --memory=2Gने मदद नहीं की, सेट से 2 और 4 फाइलों पर परीक्षण किया।
ओस्गाक्स

जवाबों:


12

आपके विवरणों को देखते हुए, मैं मानता हूं कि आपने सत्यापित किया है कि आपकी फ़ाइलों में वास्तव में 99% डेटा सामान्य है, एक सन्निहित (या लगभग सन्निहित) में 1% अंतर है।

सबसे पहले, आपको इसके अंदर अपनी फ़ाइलों के साथ एक संग्रह बनाने के लिए टार का उपयोग करना चाहिए। परीक्षणों के लिए, मैं 10 फ़ाइलों के साथ एक .tar बनाऊंगा, जिसमें 300MB का आकार होगा।

फिर, xz का उपयोग करते हुए, आपको इसे सेट करना होगा ताकि शब्दकोश एक फ़ाइल के आकार से बड़ा हो। चूंकि आप यह नहीं कहते हैं कि यदि आपके पास स्मृति प्रतिबंध हैं, तो मैं xz -9 के साथ जाऊंगा। सभी उपलब्ध मेमोरी का उपयोग नहीं करने का कोई मतलब नहीं है।

अगर यह अंतर करता है तो मैं परीक्षण करने के लिए - पूर्व निर्धारित प्रीसेट का उपयोग करूंगा।

शब्दकोश का आकार

मेरे द्वारा उपलब्ध एक दस्तावेज़ में - साइट - यह कहा गया है कि डिक्शनरी का आकार लगभग डिकम्प्रेसर मेमोरी के उपयोग के बराबर है। और -1 पैरामीटर का मतलब है 1MiB का ताना-बाना। -6 का मतलब है 10 MiB (या उसी मैनुअल के दूसरे हिस्से में 8 MiB)। इसीलिए आपको उन फ़ाइलों को एक साथ जोड़कर कोई लाभ नहीं मिल रहा है। -9 के उपयोग से अपघटन (और, इसलिए, शब्दकोश) 64 MiB हो जाएगा, और मुझे लगता है कि आप जो चाहते थे।

संपादित करें

एक और संभावना एक और कंप्रेसर का उपयोग किया जाएगा। मैं 7zip के साथ जाऊँगा, लेकिन पहले उन फ़ाइलों को टारगेट करूँगा और फिर उन्हें 7zip करूँगा।

आपकी फ़ाइलों की सामग्री के आधार पर, शायद आप PPM-D विधि के साथ 7zip का उपयोग कर सकते हैं (LZMA या LZMA2 के बजाय, जो कि डिफ़ॉल्ट है और xz द्वारा उपयोग किया जाता है)

अच्छा नहीं: ज़िप (तानाशाही = 32kB), बज़िप (तानाशाही = 900 kB)।


Xz और 7-ZIP दोनों LZMA2 का उपयोग करते हैं, इसलिए वहाँ कोई लाभ नहीं होगा। PPMD पहले से संपीड़ित मीडिया (जैसे MP3 और वीडियो) से बेहद धीमी लेकिन उच्च संपीड़न दर एन्ट्रापी निष्कर्षण के लिए अनुकूलित है। यह विशेष रूप से दो फ़ाइलों के बीच बड़ी समानताएं खोजने और उन्हें शब्दकोश में संग्रहीत करने की संभावना नहीं है - LZMA2 की तुलना में अधिक संभावना नहीं है।
allquixotic

woliveirajr, नहीं -1या -9पूर्व निर्धारित का उपयोग करने के बारे में , लेकिन निर्दिष्ट dict=64MBया dict=128MBसेट mode=fast?
असगं

-1 या -9 के बजाय तानाशाही = xxMB का उपयोग करने से बात सीधी हो जाएगी, लेकिन जब से मुझे नहीं पता कि xz अन्य मापदंडों को कैसे सेट करता है जब आप सिर्फ -9 का उपयोग करते हैं, तो मुझे नहीं पता कि आप कुछ याद नहीं करेंगे अन्य। मुझे लगता है कि आप सही दिशा में हैं, और बस परीक्षण आपको सटीक उत्तर देगा।
वल्लीविराज

3
साथ xz --lzma2=dict=128M,mode=fast,mf=hc4 --memory=2Gमैं 18 एमबी tar.xz संग्रह करने के लिए 250 फ़ाइलें (7.5 जीबी) संपीड़ित करने के लिए कर रहा था।
ऑग्सक्स

@osgx :) यह बहुत अच्छा है। अगर इसमें बहुत अधिक समय नहीं लगा (यानी, यह आपकी आवश्यकताओं के भीतर है), तो समस्या हल हो गई! :) तो आपको फ़ाइनल_साइज़ = 13MB + x * 6kB मिला, कमोबेश।
२०:०j पर woliveirajr

9

यदि वे वास्तव में 99% समान हैं जैसा कि आप कहते हैं, आपको फ़ाइलों के बीच अंतर की गणना करने के लिए bsdiff या समान एल्गोरिथ्म का उपयोग करने में सक्षम होना चाहिए । क्या अंतर संचयी (यानी, प्रत्येक फ़ाइल पहले से थोड़ी अधिक है), या किसी भी दो फ़ाइलों के बीच का अंतर बहुत अधिक है?

यदि यह संचयी नहीं है, तो आपको इसमें सक्षम होना चाहिए:

  • किसी भी मनमानी फ़ाइल को "आधार रेखा" के रूप में लें
  • भागो bsdiffप्रत्येक अतिरिक्त फाइल करने के लिए आधारभूत फ़ाइल की तुलना
  • आधार रेखा फ़ाइल के साथ प्रत्येक को एक अलग फ़ाइल के रूप में संग्रहीत करें
  • xzपरिणामों की तरह एक कंप्रेसर चलाएं (आधार रेखा + भिन्न)।

परिणाम xzपूरे संग्रह को केवल आईएनजी की तुलना में बहुत छोटा होना चाहिए ।

आप मूल फ़ाइलों को "लागू करके" मूल फ़ाइलों को "पुन: व्यवस्थित" कर सकते हैं, प्रत्येक आधार पर अन्य फ़ाइलों को प्राप्त करने के लिए आधार रेखा के ऊपर का अंतर।


संचयी नहीं। ("फ़ाइलों की प्रत्येक जोड़ी में एक ही डेटा का 99% है ...")
osgx

1
यदि अंतर संचयी नहीं हैं, तो यह bsdiffएल्गोरिथ्म का एक अच्छा अनुप्रयोग होना चाहिए । कोशिश करो।
एलाक्विओटिक

आपके उत्तर के लिए धन्यवाद, लेकिन मैंने पहले ही कार्य xz के साथ किया: tar c directory|xz --lzma2=dict=128M,mode=fastऔर इनपुट फ़ाइलों को हटा दिया। वास्तव में मेरी इनपुट फाइलें टेक्स्ट थीं, इसलिए मैं इसके बजाय bsdiff(जो मेरे पीसी पर स्थापित नहीं है) का उपयोग कर सकते हैं ।
ऑग्सक्स

5

आप (आई) कुछ archiver लंबी दूरी पैटर्न का पता लगाने में सक्षम है, उदाहरण के लिए, के साथ राल का उपयोग कर सकते rzip या lrzip ( रीडमी )। दोनों लंबे समय तक अतिरेक का पता लगाने / कटौती का उपयोग करते हैं, फिर rzip bzip2 और lrzip xz (lzma) / ZPAQ का उपयोग करता है:

rzip, gzip या bzip2 की कार्यक्षमता के समान एक संपीड़न प्रोग्राम है, लेकिन फाइलों में लंबी दूरी की अतिरेक का लाभ उठाने में सक्षम है, जो कभी-कभी अन्य प्रोग्रामों की तुलना में rzip को अधिक बेहतर संपीड़न अनुपात बनाने की अनुमति दे सकता है। ... rzip का मुख्य लाभ यह है कि इसमें 900 Mbyte का प्रभावी इतिहास बफर है। इसका मतलब यह है कि यह अन्य आम तौर पर इस्तेमाल किया संपीड़न कार्यक्रमों की तुलना में भारी दूरी पर इनपुट फ़ाइल के मिलान वाले टुकड़े पा सकता है। तुलना द्वारा gzip प्रोग्राम 32 kbyte के इतिहास बफ़र का उपयोग करता है और bzip2 900 kbyte के इतिहास बफ़र का उपयोग करता है

lrzip में बड़ा बफ़र है और कई संपीड़न एल्गोरिदम (बहुत तेज़, तेज़, अच्छा और सबसे अच्छा - ZPAQ) में से एक का उपयोग कर सकते हैं:

Lrzip rzip के एक विस्तारित संस्करण का उपयोग करता है जो पहली बार लंबी दूरी की अतिरेक कटौती करता है। स्मृति आकार के अनुसार lrzip संशोधन इसे पैमाना बनाते हैं।

डेटा तो या तो है: 1. lzma (डिफ़ॉल्ट) से प्रभावित है जो bzip2x की गति से लगभग दुगुनी गति से उत्कृष्ट संपीड़न देता है ...

अन्य तरीके से gup packfile के आधार पर ब्लॉक- / खंड-स्तरीय कटौती के साथ bup - बैकअप प्रोग्राम का उपयोग किया जा रहा है :

यह बड़ी फ़ाइलों को विखंडू में विभाजित करने के लिए एक रोलिंग चेकसम एल्गोरिथ्म (rsync के समान) का उपयोग करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.