आसान एप्लिकेशन इंटरऑपरेबिलिटी के लिए अधिकांश डेटा को पढ़ने में आसान फ़ाइल स्वरूपों में संग्रहीत किया जाता है। जबकि छवि, वीडियो और ध्वनि संपीड़न के लिए व्यापक रूप से उपयोग किए जाने वाले प्रारूप हैं, अधिकांश अन्य डेटा को JSON, CSV, या अन्य समान पाठ-आधारित प्रारूपों के रूप में पाठ के रूप में संग्रहीत किया जाता है।
Parquet, Avro, और ORC जैसे प्रारूपों में वैकल्पिक संपीड़न होता है, इसलिए आमतौर पर, संग्रहीत होने पर ये प्रारूप पहले से ही संपीड़ित होते हैं। वीडियो और छवियों को भी आमतौर पर डोमेन-विशिष्ट एल्गोरिदम के साथ संपीड़ित किया जाता है जो सामान्य प्रारूपों की तुलना में बेहतर संपीड़न प्रदान करते हैं।
हालाँकि, कस्टम डेटा के लिए, डेटा को एक सरल प्रारूप में रखना बेहतर होता है जिसमें एक्सेस के लिए डीकंप्रेसन चरण शामिल नहीं होता है। हम इस डेटा को डिस्क पर संग्रहीत करने से पहले संपीड़ित करने का विकल्प प्रदान करना चाहते हैं।
सिस्टम के समग्र प्रदर्शन को प्रभावित किए बिना पारदर्शी संपीड़न को सक्षम करने के लिए मिनिओ के लिए संपीड़न विकसित किया गया है।
मिनिओ स्नैपी पर आधारित एस2 नामक एक संपीड़न विधि का उपयोग करता है। यह स्नैपी सामग्री के साथ संगत है, लेकिन इसमें दो प्रारूप एक्सटेंशन हैं। सबसे पहले, यह स्नैपी स्ट्रीम के लिए अनुमत 64KB ब्लॉक से बड़े ब्लॉक की अनुमति देता है। इससे संपीड़न में काफी सुधार होता है। दूसरे, यह "रिपीट ऑफ़सेट्स" जोड़ता है, जो मुख्य रूप से मशीन-जनित डेटा, जैसे लॉग फ़ाइलें, JSON और CSV में संपीड़न सुधार प्रदान करता है। यह 64 बाइट्स से अधिक लंबे मैचों को प्रभावी ढंग से एन्कोड करने की भी अनुमति देता है, जो स्नैपी के लिए एक समस्या है।
S2 कई ब्लॉकों के समवर्ती संपीड़न की भी अनुमति देता है जब इनपुट एक कोर द्वारा अवशोषित की तुलना में तेज़ होता है। व्यक्तिगत अनुरोधों की प्रतिक्रियाशीलता को बनाए रखने के लिए यह महत्वपूर्ण है। प्रभावी रूप से 16+ कोर के साथ मेमोरी स्पीड की सीमा होगी।
कुछ उपकरण विक्रेता प्रति टीबी लागत की गणना करते समय दिए गए संपीड़न अनुपात का वादा करेंगे या मान भी लेंगे। संपीड़न के साथ, 1:1 से ऊपर कोई गारंटीकृत अनुपात नहीं है। विभिन्न डेटा प्रकार अलग-अलग संपीड़न अनुपात उत्पन्न करते हैं, और हमारी राय में कोई औसत संपीड़न अनुपात प्रदान करने का कोई सार्थक तरीका नहीं है। संपीड़न अनुपात का मूल्यांकन कभी भी शून्य में नहीं किया जाना चाहिए - उन्हें हमेशा संपीड़न गति के साथ जोड़ा जाना चाहिए, क्योंकि व्यावहारिक संपीड़न इन दो कारकों का एक व्यापार है।
आइए अंतर देखने के लिए एकल डेटा प्रकार की तुलना करें। हम 16 कोर तक का उपयोग करते हुए, AMD64 प्लेटफ़ॉर्म पर इन एल्गोरिदम के गो कार्यान्वयन की तुलना करते हैं।
सबसे पहले, क्षैतिज अक्ष एक छोटा संपीड़न अनुपात है, असम्पीडित आकार से प्राप्त कमी। सही बेहतर है. संदर्भ देने के लिए, सिंगल-थ्रेडेड gzip लेवल 5 को शामिल किया गया है।
कंप्रेसर | स्पीड एमबी/एस | आकार | कमी | दिसंबर एमबी/एस |
---|---|---|---|---|
S2 डिफ़ॉल्ट | 15148 | 1043196283 | 83.37% | 2378 |
S2 बेहतर | 11551 | 954430842 | 84.79% | 2300 |
S2 सर्वश्रेष्ठ | 680 | 832855431 | 86.73% | 2572 |
LZ4 सबसे तेज़ | 5645 | 1280414160 | 79.59% | 2680 |
LZ4 सर्वश्रेष्ठ | 1552 | 1091826460 | 82.60% | 2694 |
तेज़ | 946 | 1525176492 | 75.69% | 1828 |
गज़िप एल5 | 206 | 942726276 | 84.97% | 557 |
डीकंप्रेसन गति एकल कोर का उपयोग कर रही है, भले ही S2 समवर्ती डीकंप्रेसन प्रदान करता है।
इस डेटा के लिए, स्नैपी Gzip संदर्भ से लगभग 10% कम है। चूँकि हम कमी प्रतिशत के साथ काम कर रहे हैं, इसका मतलब यह भी है कि स्नैपी Gzip संपीड़ित डेटा का लगभग 1.6x स्थान लेता है। यह इस तथ्य को नजरअंदाज करता है कि स्नैपी जीज़िप की तुलना में लगभग 4 गुना तेजी से डीकंप्रेस करता है।
LZ4 को आमतौर पर स्नैपी से बेहतर माना जाता है। LZ4 का कार्यान्वयन जो एकाधिक कोर पर संपीड़न की अनुमति देता है, इस बिंदु को भी स्पष्ट करता है। लेकिन बेस कम्प्रेशन बेहतर है. LZ4 बेस्ट, जिसे कभी-कभी LZ4-HC भी कहा जाता है, gzip के करीब संपीड़न प्रदान करता है, लेकिन भले ही डीकंप्रेसन तेज़ है, लेकिन संपीड़न इंटरैक्टिव गति पर नहीं है।
S2 तीन संपीड़न स्तर प्रदान करता है; S2 डिफॉल्ट सबसे तेज़ संभव है, और इसे सिंगल कोर उपयोग के संबंध में स्नैपी के सीधे प्रतिस्पर्धी के रूप में देखा जा सकता है। इस डेटा प्रकार के साथ यह काफी अधिक थ्रूपुट के साथ किसी भी LZ4 स्तर से बेहतर प्रदर्शन करता है। इस मोड का उपयोग मिनिओ द्वारा उन प्लेटफार्मों के लिए किया जाता है जहां असेंबली कार्यान्वयन उपलब्ध नहीं है।
S2 Better उच्च संपीड़न के लिए थोड़े से CPU के व्यापार की अनुमति देता है। यहां संपीड़न Gzip को टक्कर देता है, लेकिन विसंपीड़न गति काफी बेहतर है। इस मोड का उपयोग मिनिओ द्वारा उन प्लेटफार्मों पर किया जाता है जहां असेंबली उपलब्ध है - वर्तमान में AMD64।
S2 Best सबसे अच्छा संपीड़न है जो S2 वर्तमान प्रारूप के साथ कर सकता है। इसका उपयोग उन स्थितियों में किया जा सकता है जहां संपीड़न गति/संसाधन सबसे महत्वपूर्ण नहीं हैं, लेकिन तेज़ डीकंप्रेसन की अभी भी आवश्यकता है। वर्तमान में मिनियो इस मोड का उपयोग नहीं करता है, लेकिन इसे उन वस्तुओं के लिए जीवनचक्र विकल्प के रूप में लागू कर सकता है जो कुछ समय से नहीं बदले हैं।
तुलना करने के लिए, यहां अन्य डेटा प्रकारों की कुछ तुलनाएं दी गई हैं:
आधुनिक संपीड़न की एक महत्वपूर्ण विशेषता यह है कि यह पूर्व-संपीड़ित डेटा के साथ अच्छा व्यवहार करता है। परंपरागत रूप से पूर्व-संपीड़ित डेटा संपीड़न एल्गोरिदम के लिए एक समस्या रही है। असम्पीडित डेटा का सामना करने पर अक्सर कंप्रेसर अनुचित रूप से धीमा हो जाता है।
इसलिए बहुत से लोग सहज रूप से जानते हैं कि पहले से संपीड़ित डेटा को दोबारा संपीड़ित करना बुरा है। हालाँकि, कई आधुनिक कार्यान्वयन अब असंगत अनुभागों को शीघ्रता से छोड़ने के लिए उचित हद तक सक्षम हैं।
उपरोक्त कंप्रेसर के लिए, ये 2GiB (2,147,483,647 बाइट्स) असम्पीडित डेटा पर गति हैं:
कंप्रेसर | स्पीड एमबी/एस | आकार | कमी |
---|---|---|---|
S2 डिफ़ॉल्ट | 13045 | 2147487753 | 0.00% |
S2 बेहतर | 9894 | 2147487753 | 0.00% |
S2 सर्वश्रेष्ठ | 3938 | 2147487753 | 0.00% |
LZ4 तेज़ | 6400 | 2147485710 | 0.00% |
LZ4 सर्वश्रेष्ठ | 12488 | 2147745841 | -0.01% |
तेज़ | 6564 | 2147745801 | -0.01% |
जीज़िप (गो) एल5 | 63 | 2148139030 | -0.03% |
जीज़िप (ऑल्ट) एल5 | 5535 | 2147647512 | -0.01% |
यहां हमने इस "खराब" व्यवहार के प्रतिनिधि के रूप में गो मानक लाइब्रेरी से gzip को भी शामिल किया है। एक वैकल्पिक gzip कार्यान्वयन यह समस्या नहीं दिखाता है। अन्य सभी मामलों में सामग्री काफी तेजी से संसाधित होती है और उन्हें पास मिल जाता है।
इसका मतलब यह है कि मिनिओ से पूर्व-संपीड़ित डेटा को अच्छी तरह से संभालने की उम्मीद की जा सकती है।
संपीड़न का एक सामान्य नकारात्मक पक्ष यह है कि किसी फ़ाइल के भीतर छोड़ने की क्षमता खो जाती है। इसका समाधान ब्लॉकों को स्वतंत्र रूप से संपीड़ित करना और एक सूचकांक रखना है जो कई असम्पीडित ऑफसेट को संपीड़ित ऑफसेट में मैप करता है जहां डीकंप्रेसन शुरू हो सकता है।
स्वतंत्र ब्लॉकों को संपीड़ित करने से संपीड़न थोड़ा कम हो जाएगा, लेकिन बड़े ब्लॉकों के साथ कम होगा। स्नैपी/एस2 डिज़ाइन के अनुसार स्ट्रीम को स्वतंत्र ब्लॉक के रूप में संपीड़ित करता है।
मिनिओ के लिए यह प्रासंगिक है क्योंकि S3 GetObject अनुरोधों में पुनर्प्राप्त करने के लिए वैकल्पिक श्रेणियां शामिल हो सकती हैं। यह वस्तुओं के हिस्सों को पुनः प्राप्त करने की अनुमति देता है, और हम चाहते हैं कि यह यथासंभव कुशल हो।
RELEASE.2022-07-13T23-29-44Z से शुरू करके अब हम अपलोड किए गए प्रत्येक फ़ाइल भाग के लिए एक इंडेक्स तैयार करते हैं जो 8MB से बड़ा है। फिर सूचकांक को आंतरिक रूप से मेटाडेटा से जोड़ा जाता है। यह हमें प्रभावी ढंग से आगे बढ़ने और अनुरोधित डेटा को वापस करने के लिए आवश्यक ऑब्जेक्ट के केवल हिस्से को डीकोड करने की अनुमति देता है।
सूचकांक आम तौर पर 16 बाइट्स + लगभग 3 बाइट्स प्रति एमबी डेटा होता है। यह मिनिओ को संपीड़ित फ़ाइल के भीतर से किसी भी बाइट को पहली बाइट को पुनः प्राप्त करने की गति के समान गति से परोसने की अनुमति देता है।
डिफ़ॉल्ट रूप से मिनीआईओ को डिस्क पर एन्क्रिप्ट किए जाने वाले डेटा को संपीड़ित करने के लिए एक अतिरिक्त पैरामीटर की आवश्यकता होती है। यह सुनिश्चित करना है कि आप इसके निहितार्थों से अवगत हैं।
डेटा को संपीड़ित करते समय आपको दो नंबर मिलते हैं; असम्पीडित और संपीड़ित आकार. संपीड़न के बिना आपका डेटा प्राप्त करने वाला कोई भी व्यक्ति इनमें से केवल एक ही देख सकता है - असम्पीडित आकार।
हालाँकि यह अभी भी आपको संपीड़ित फ़ाइल के भीतर किसी भी डेटा तक पहुँच नहीं देता है, यह डेटा पर कुछ संकेत देता है। यह आपको कुछ ऐसे प्रकार के डेटा बता सकता है जो संभवतः नहीं हो सकते। यदि आप कोई ऐसी फ़ाइल देखते हैं जो 50% संपीड़ित है तो इसकी अत्यधिक संभावना नहीं है कि उसमें MP4 संपीड़ित वीडियो होगा।
इसी प्रकार, केवल कुछ बाइट्स में संपीड़ित फ़ाइल में संभवतः एक बहुत ही सरल दोहराया अनुक्रम होगा। यह बताना संभव नहीं है कि क्रम क्या है, लेकिन इससे संभावनाएँ कम हो जाती हैं। RELEASE.2022-07-13T23-29-44Z से MiniIO संपीड़ित आउटपुट को 256 बाइट्स के गुणक में पैड करेगा। यह पैडिंग कहीं भी दर्ज नहीं है. हम इसे समस्या का पूर्ण समाधान नहीं मानते हैं, लेकिन यह विरोधियों के लिए लीक हुई आकार की जानकारी की उपयोगिता को बहुत कम कर देता है।
यही मुख्य कारण है कि मिनिओ ग्राहकों को संपीड़ित आकारों के बारे में कोई जानकारी नहीं लौटाता है। इसलिए इसके बारे में किसी भी जानकारी के लिए बैकएंड स्टोरेज या बैकएंड नेटवर्क संचार तक पहुंच की आवश्यकता होगी।
इस जानकारी के साथ अब आप यह निर्धारित करने के लिए पर्याप्त ज्ञान से लैस हैं कि क्या आप संपीड़न और एन्क्रिप्शन को सक्षम करना सुरक्षित मानते हैं।
मिनियो पर CRIME शैली के हमले संभव नहीं हैं, क्योंकि हम किसी भी संपीड़ित स्ट्रीम को संशोधित करने या जोड़ने की अनुमति नहीं देते हैं। हम सभी ऑब्जेक्ट संस्करणों में डुप्लिकेट/संपीड़न भी नहीं करते हैं क्योंकि इससे फ़ाइलों के बारे में बहुत अधिक जानकारी लीक हो जाएगी।
डिफ़ॉल्ट रूप से, MiniIO में ऑन-डिस्क संपीड़न अक्षम है। ऑन-डिस्क संपीड़न को किसी भी समय सक्षम या अक्षम किया जा सकता है। ऑन-डिस्क कंप्रेशन को सक्षम करने के लिए mc admin config set myminio compression enable=on
उपयोग करें।
यह पूर्व निर्धारित संख्या में एक्सटेंशन और MIME प्रकारों के लिए संपीड़न सक्षम करेगा। डिफ़ॉल्ट रूप से इनमें शामिल होंगे:
एक्सटेंशन | माइम प्रकार |
---|---|
.txt.log.csv.json.tar.xml.bin | text/*एप्लिकेशन/jsonapplication/xmlbinary/octet-stream |
आप mc admin config get myminio compression
के साथ वर्तमान सेटिंग्स का निरीक्षण कर सकते हैं।
आप इस सूची को किसी भी समय संशोधित करके संशोधित कर सकते हैं:
mc admin config set myminio compression \ extensions=.txt,.log,.csv,.json,.tar,.xml,.bin \ mime_types=text/*,application/json,application/xml,binary/octet-stream
डिफ़ॉल्ट रूप से मिनियो आमतौर पर असंपीड़ित डेटा, जैसे कि जीज़िप, ऑडियो, वीडियो, छवि फ़ाइलों के एक्सटेंशन को जबरदस्ती बाहर कर देता है।
एक्सटेंशन सूची और माइम प्रकारों को खाली पर सेट करके बहिष्कृत वस्तुओं को छोड़कर सभी वस्तुओं के लिए संपीड़न सक्षम करना संभव है:
mc admin config set myminio compression enable=on extensions= mime_types=
अंतिम सेटिंग allow_encryption=on
है, जो एन्क्रिप्ट की गई वस्तुओं के लिए भी संपीड़न की अनुमति देती है। इसे केवल तभी सेट करें जब आपने उपरोक्त अनुभाग को पढ़ लिया हो और इसके निहितार्थ को समझ लिया हो।
मिनिआईओ सर्वोत्तम श्रेणी की संपीड़न योजना प्रदान करता है जो डिस्क पर डेटा के पूरी तरह से पारदर्शी संपीड़न की अनुमति देता है। यह कई परिदृश्यों में, केवल संपीड़न को सक्षम करके, भंडारण लागत में कमी ला सकता है।
संपीड़न सक्षम होने पर GET और PUT का प्रदर्शन सभी मामलों में समान रहना चाहिए। वास्तव में, ऐसी स्थितियों में जहां प्रदर्शन डिस्क पढ़ने की गति से सीमित होता है, संपीड़न अतिरिक्त प्रदर्शन प्रदान कर सकता है क्योंकि कम डेटा पढ़ना पड़ता है।
हम नई सुविधाएँ जोड़ते रहेंगे। हम वर्तमान में बकेट/उपसर्ग स्तर कॉन्फ़िगरेशन विकल्पों के साथ-साथ संपीड़न-के-जीवनचक्र का मूल्यांकन कर रहे हैं जो फ़ाइलों को एक निश्चित आयु तक पहुंचने पर संपीड़ित कर देगा।
यदि आप इन सुविधाओं में रुचि रखते हैं, तो MiniIO डाउनलोड करें और इसे स्वयं आज़माएँ। यदि आपके कोई प्रश्न हैं या आप हमें उन बेहतरीन ऐप्स के बारे में बताना चाहते हैं जिन्हें आप MiniIO का उपयोग करके बना रहे हैं, तो हमें [email protected] पर पिंग करें, स्लैक समुदाय में शामिल हों, हमारे ब्लॉग का अनुसरण करें, या हमारे न्यूज़लेटर की सदस्यता लें।
यहाँ भी प्रकाशित किया गया है.