डेल्टा एन्कोडिंग

From Vigyanwiki

डेल्टा एन्कोडिंग पूर्ण फ़ाइलों के अंकित अनुक्रमिक डाटा के बीच डेटा डिफ्फ्रेंस (डेल्टा) के रूप में डेटा को संग्रहीत या प्रसारित करने का एक विधि है; जो की अधिक सामान्यतः इसे डेटा दिफ्फ़रेंसिंग के रूप में जाना जाता है। डेल्टा एन्कोडिंग को कभी-कभी डेल्टा कम्प्रेशन कहा जाता है, यह विशेष कर जहां परिवर्तनों के अर्चिवल इतिहास की आवश्यकता होती है (उदाहरण के लिए, संशोधन नियंत्रण सॉफ़्टवेयर में)।

डिफरेंस को अलग-अलग फाइलों में अंकित किया जाता है जिन्हें डेल्टा या डिफ कहा जाता है। ऐसी स्थितियों में जहां डिफरेंस छोटे होते हैं - उदाहरण के लिए, किसी बड़े डॉक्यूमेंट में कुछ शब्दों का परिवर्तन या बड़ी टेबल में कुछ रिकॉर्ड का परिवर्तन - डेल्टा एन्कोडिंग डेटा रिडनडेन्सी को बहुत कम कर देता है। अद्वितीय डेल्टाओं का संग्रह उनके गैर-एन्कोडेड समकक्षों की तुलना में बहुत अधिक स्थान-कुशल है।

तार्किक दृष्टिकोण से दो डेटा मानों के बीच का डिफरेंस एक मान को दूसरे से प्राप्त करने के लिए आवश्यक जानकारी है - रिलेटिव एन्ट्रापी देखें। समान मानों (कुछ तुल्यता संबंध के अनुसार) के बीच के डिफरेंस को अधिकांशतः 0 या तटस्थ अवयव कहा जाता है।

साधारण उदाहरण

संभवतः सबसे सरल उदाहरण बाइट्स के मानों को स्वयं मानों के अंकित अनुक्रमिक मानों के बीच डिफरेंस (डेल्टा) के रूप में संग्रहीत करना है। इसलिए, 2, 4, 6, 9, 7 के अतिरिक्त , हम 2, 2, 2, 3, −2 संग्रहित करेंगे जब निकट के नमूने सहसंबद्ध होते हैं तो यह मानों के वैरिंऐंस (सीमा) को कम कर देता है, जिससे समान डेटा के लिए कम बिट उपयोग सक्षम हो जाता है। इंटरचेंज फ़ाइल प्रारूप 8एसवीएक्स ध्वनि प्रारूप इस एन्कोडिंग को राव ध्वनि डेटा पर कोम्प्रेसन प्रयुक्त करने से पहले प्रयुक्त करता है। डेल्टा एनकोडेड होने पर सभी 8-बिट ध्वनि सैंपल (सिग्नल प्रोसेसिंग) भी उत्तम विधि से कोम्प्रेसन नहीं होते हैं, और 16-बिट और उत्तम नमूनों के लिए डेल्टा एन्कोडिंग की उपयोगिता और भी छोटी है। इसलिए, कोम्प्रेसन एल्गोरिदम अधिकांशतः डेल्टा एनकोड को तभी चुनते हैं जब कोम्प्रेसन के बिना से उत्तम होता है। चूँकि, वीडियो कोम्प्रेसन में, डेल्टा फ़्रेम फ़्रेम आकार को अधिक कम कर सकते हैं और लगभग हर वीडियो कोम्प्रेसन कोडेक में उपयोग किए जाते हैं।

परिभाषा

डेल्टा को 2 विधियों से परिभाषित किया जा सकता है, सिमेट्रिक डेल्टा और डाईरेक्टेड डेल्टा एक सिमेट्रिक डेल्टा को इस प्रकार व्यक्त किया जा सकता है

जहाँ और दो वर्जन का प्रतिनिधित्व करें।

एक निर्देशित डेल्टा, जिसे परिवर्तन भी कहा जाता है, (प्राथमिक) परिवर्तन संचालन का एक क्रम है, जो एक वर्जन पर प्रयुक्त होने पर, एक और वर्जन उत्पन्न करता है (डेटाबेस में लेनदेन लॉग के पत्राचार पर ध्यान दें)। कंप्यूटर कार्यान्वयन में, वे समान्यत: दो कमांड वाली लैंग्वेज का रूप लेते हैं: v1 से डेटा कॉपी करें और शाब्दिक डेटा लिखा जाता है।

वेरिएंट

डेल्टा एन्कोडिंग की एक भिन्नता जो स्ट्रिंग (कंप्यूटर विज्ञान) के प्रीफिक्स (कंप्यूटर विज्ञान) या सफिक्स (कंप्यूटर विज्ञान) के बीच डिफरेंस को एन्कोड करती है, इन्क्रेमेंटेड एन्कोडिंग कहलाती है। यह स्ट्रिंग के बीच छोटे डिफरेंस वाली क्रमबद्ध सूचियों के लिए विशेष रूप से प्रभावी है, जैसे शब्दकोश से शब्दों की सूची है।

कार्यान्वयन उद्देश्य

एन्कोड किए जाने वाले डेटा की प्रकृति एक विशेष कोम्प्रेसन एल्गोरिदम की प्रभावशीलता को प्रभावित करती है।

डेल्टा एन्कोडिंग सबसे अच्छा प्रदर्शन करती है जब डेटा में छोटी या निरंतर भिन्नता होती है; किसी अवर्गीकृत डेटा सेट के लिए, इस पद्धति से बहुत कम या कोई कोम्प्रेसन संभव नहीं हो सकता है।

एक नेटवर्क पर डेल्टा एन्कोडेड ट्रांसमिशन में जहां कम्युनिकेशन चैनल के प्रत्येक छोर पर फ़ाइल की केवल एक प्रति उपलब्ध होती है, विशेष एरर कंट्रोल कोड का उपयोग यह पता लगाने के लिए किया जाता है कि फ़ाइल के कौन से भाग इसके पिछले वर्जन के बाद से बदल गए हैं।

उदाहरण के लिए, आरसिंक मार्क एडलर के एडलर-32 अंततः, पर आधारित एक रोलिंग चेकसम एल्गोरिदम का उपयोग करता है।

सैंपल सी कोड

निम्नलिखित सी (प्रोग्रामिंग भाषा) कोड वर्णों के अनुक्रम पर डेल्टा एन्कोडिंग और डिकोडिंग का एक सरल रूप निष्पादित करता है:

void delta_encode(unsigned char *buffer, int length)
{
    unsigned char last = 0;
    for (int i = 0; i < length; i++)
    {
        unsigned char current = buffer[i];
        buffer[i] = current - last;
        last = current;
    }
}

void delta_decode(unsigned char *buffer, int length)
{
    unsigned char last = 0;
    for (int i = 0; i < length; i++)
    {
        unsigned char delta = buffer[i];
        buffer[i] = delta + last;
        last = buffer[i];
    }
}


उदाहरण

एचटीटीपी में डेल्टा एन्कोडिंग

डेल्टा एन्कोडिंग के उपयोग का एक अन्य उदाहरण है आरएफसी 3229, एचटीटीपी में डेल्टा एन्कोडिंग में जो प्रस्तावित करता है कि एचटीटीपी सर्वर अपडेटेड वेब पेजों को इस रूप में भेजने में सक्षम होना चाहिए वर्जन (डेल्टा) के बीच डिफरेंस है जिससे इंटरनेट ट्रैफ़िक में कमी आनी चाहिए, क्योंकि अधिकांश पृष्ठ बार-बार पूरी तरह से लिखे जाने के अंकित समय के साथ धीरे-धीरे बदलते हैं:

यह डॉक्यूमेंट बताता है कि डेल्टा एन्कोडिंग को एचटीटीपी/1.1 के संगत एक्सटेंशन के रूप में कैसे समर्थित किया जा सकता है।

कई एचटीटीपी (हाइपरटेक्स्ट ट्रांसपोर्ट प्रोटोकॉल) अनुरोध संसाधनों के थोड़े संशोधित उदाहरणों की पुनर्प्राप्ति का कारण बनते हैं जिनके लिए क्लाइंट के पास पहले से ही कैश एंट्री है। अनुसंधान से पता चला है कि ऐसे संशोधित अद्यतन अधिकांशतः होते रहते हैं, और ये संशोधन सामान्यतः वास्तविक इकाई की तुलना में बहुत छोटे होते हैं। ऐसे स्थितियों में, एचटीटीपी नेटवर्क बैंडविड्थ का अधिक कुशल उपयोग करेगा यदि यह संसाधन के संपूर्ण नए उदाहरण के अतिरिक्त परिवर्तनों का न्यूनतम विवरण स्थानांतरित कर सकते है।

[...] हमारा मानना है कि इस डॉक्यूमेंट में बाद में वर्णित "इंस्टेंस मैनीपुलेशन" फ्रेम वर्क का उपयोग करके आरसिंक का समर्थन करना संभव हो सकता है, किंतु इस पर किसी भी विवरण में काम नहीं किया गया है।

सुझाए गए आरसिंक-आधारित फ्रेम वर्क को एचटीटीपी प्रॉक्सी की एक जोड़ी के रूप में आरप्रॉक्सी सिस्टम में प्रयुक्त किया गया था।[1] मूलभूत दी वीसीडिफ-आधारित कार्यान्वयन की अनुरूप दोनों प्रणालियों का उपयोग संभवतः ही कभी किया जाता है।

डेल्टा कॉपीिंग

डेल्टा कॉपीिंग किसी फ़ाइल की प्रतिलिपि बनाने का एक तेज़ विधि है जिसे आंशिक रूप से बदल दिया जाता है, जब पिछला वर्जन गंतव्य स्थान पर उपस्थित होता है। डेल्टा कॉपीिंग के साथ, फ़ाइल का केवल बदला हुआ भाग ही कॉपी किया जाता है। इसका उपयोग समान्यत: बैकअप या फ़ाइल प्रतिलिपि करने वाले सॉफ़्टवेयर में किया जाता है,जो की अधिकांशतः निजी नेटवर्क या इंटरनेट पर कंप्यूटर के बीच कॉपी करते समय बैंडविड्थ (कंप्यूटिंग) को बचाने के लिए एक उल्लेखनीय ओपन-सोर्स उदाहरण आरसिंक है।[2][3][4]


ऑनलाइन बैकअप

कई ऑनलाइन बैकअप सेवाएँ अपने उपयोगकर्ताओं को पिछले बैकअप से उसी फ़ाइल के पिछले वर्जन देने के लिए इस पद्धति को अपनाती हैं, जिसे अधिकांशतः डेल्टा के रूप में जाना जाता है। इससे संबंधित निवेश कम हो जाती है, न केवल डेटा की मात्रा में जिसे अलग-अलग वर्जन के रूप में संग्रहीत किया जाना है (क्योंकि फ़ाइल के प्रत्येक परिवर्तित वर्जन को उपयोगकर्ताओं तक पहुंचने के लिए प्रस्तुत किया जाना है), किंतु अपलोडिंग (और) में निवेश भी कम हो जाती है कभी-कभी अपडेट की गई प्रत्येक फ़ाइल की डाउनलोडिंग (पूरी फ़ाइल के अंकित केवल छोटे डेल्टा का उपयोग करके) करते है।

डेल्टा अपडेट

बड़े सॉफ़्टवेयर पैकेजों के लिए, समान्यत: वर्जन के बीच बहुत कम डेटा बदला जाता है। कई वंडर्स समय और बैंडविड्थ बचाने के लिए डेल्टा ट्रांसफ़र का उपयोग करना चुनते हैं।

अंतर

डिफ एक फ़ाइल कोम्पेरिसन प्रोग्राम है, जिसका उपयोग मुख्य रूप से टेक्स्ट फ़ाइलों के लिए किया जाता है। डिफ़ॉल्ट रूप से, यह सिमेट्रिक डेल्टा उत्पन्न करता है जो प्रतिवर्ती होता है। सॉफ़्टवेयर पैच (यूनिक्स) के लिए उपयोग किए जाने वाले दो प्रारूप, कांटेक्स्ट और यूनिफाइड, अतिरिक्त कांटेक्स्ट लाइनें प्रदान करते हैं जो लाइन संख्या में बदलाव को सहन करने की अनुमति देते हैं।

गिट

गिट सोर्स कोड कंट्रोल सिस्टम एक सहायक गिट रिपैक ऑपरेशन में डेल्टा कोम्प्रेसन का उपयोग करती है। रिपॉजिटरी में उपस्थित वस्तुएं जो अभी तक डेल्टा-कोम्प्रेसन नहीं हुई हैं (लूज़ ओब्जेट्स) की तुलना अन्य सभी वस्तुओं के अनुमानी रूप से चुने गए सबसेट से की जाती है, और सामान्य डेटा और डिफरेंस को एक पैक फ़ाइल में संयोजित किया जाता है जिसे पारंपरिक विधियों का उपयोग करके कोम्प्रेसन किया जाता है। सामान्य उपयोग के स्थितियों में, जहां स्रोत या डेटा फ़ाइलों को कमिट के बीच क्रमिक रूप से बदला जाता है, इसके परिणामस्वरूप महत्वपूर्ण स्थान की बचत हो सकती है। रीपैक ऑपरेशन समान्यत: गिट जीसी प्रक्रिया के भाग के रूप में किया जाता है, जो स्वचालित रूप से तब चालू हो जाता है जब लूज़ ओब्जेट्स या पैक फ़ाइलों की संख्या कॉन्फ़िगर सीमा से अधिक हो जाती है।

प्रारूप को गिट डॉक्यूमेंट के पैक-प्रारूप पृष्ठ में प्रलेखित किया गया है। यह एक निर्देशित डेल्टा प्रयुक्त करता है।[5]

वीसीडीआईएफएफ

निर्देशित डेल्टा एन्कोडिंग के लिए एक सामान्य प्रारूप वीसीडीआईएफएफ है, जिसका वर्णन आरएफसी3284 में किया गया है। फ्री सॉफ्टवेयर कार्यान्वयन में एक्सडेल्टा और ओपन-वीसीडिफ सम्मिलित हैं।

जीडीआईएफएफ

जेनेरिक डिफ फॉर्मेट (जीडीआईएफएफ) एक अन्य निर्देशित डेल्टा एन्कोडिंग प्रारूप है। इसे 1997 में W3C को प्रस्तुत किया गया था।[6] कई स्थितियों में, वीसीडीआईएफएफ की कोम्प्रेसन रेट जीडीआईएफएफ से उत्तम है।

बीएसडिफ

बीएसडिफ सफिक्स सोर्टिंग का उपयोग करने वाला एक बाइनरी डिफ प्रोग्राम है। उन निष्पादनयोग्यों के लिए जिनमें सूचक पते में कई परिवर्तन होते हैं, यह वीसीडीआईएफएफ-प्रकार की प्रतिलिपि और शाब्दिक एन्कोडिंग से उत्तम प्रदर्शन करता है। पार्स असेंबली कोड को पार्स करने की आवश्यकता के बिना एक छोटा सा डिफरेंस उत्पन्न करने का एक विधि खोजता है (जैसा कि गूगल के कौरगेट में है)। बीएसडिफ त्रुटियों के साथ प्रतिलिपि मिलान की अनुमति देकर इसे प्राप्त करता है, जिसे बाद में बाइटवाइज डिफरेंस की एक अतिरिक्त ऐड सरणी का उपयोग करके ठीक किया जाता है। चूँकि यह ऐरे अधिकतर या तो शून्य है या ऑफ़सेट परिवर्तनों के लिए दोहराई गई मान है, यह कोम्प्रेसन के बाद बहुत कम जगह लेती है।[7]

डेल्टा अपडेट के लिए बीएसडिफ उपयोगी है। गूगल क्रोमियम और एंड्रॉयड में बीएसडिफ का उपयोग करता है। आरपीएम पैकेज मैनेजर की डेल्टाआरपीएम सुविधा एक हेविली-मॉडिफाइड बीएसडिफ पर आधारित है जो मिलान के लिए हैश टेबल का उपयोग कर सकती है।[8] फ्रीबीएसडी अपडेट के लिए बीएसडिफ का भी उपयोग करता है।[9]

2005 में बीएसडिफ के 4.3 रिलीज़ के बाद से, इसके लिए विभिन्न सुधार या सुधार किए गए हैं। गूगल अपने प्रत्येक उत्पाद के लिए कोड के कई वर्जन रखता है।[10] फ्रीबीएसडी गूगल के कई संगत परिवर्तनों को अपनाता है, मुख्य रूप से वल्नरएबिलिटी को ठीक करना और तेजी से स्विच करना divsufsort प्रफिक्स -सॉर्टिंग रूटीन।[11] डेबियन के पास कार्यक्रम में प्रदर्शन बदलावों की एक श्रृंखला है।[12]

डेल्टा डेबियन डेल्टा अपडेट में उपयोग के लिए प्रस्तावित बीएसडिफ का पुनर्लेखन है। अन्य दक्षता सुधारों के अतिरिक्त यह मेमोरी और सीपीयू निवेश को कम करने के लिए एक स्लाइडिंग विंडो का उपयोग करता है।[13]


यह भी देखें

संदर्भ

  1. "rproxy: introduction". rproxy.samba.org.
  2. "Feature request: Delta copying - 2BrightSparks". Archived from the original on 2016-03-13. Retrieved 2016-04-29.
  3. "Bvckup 2 | Forum | How delta copying works".
  4. http://www.eggheadcafe.com/software/aspnet/33678264/delta-copying.aspx[permanent dead link]
  5. "Git - पैक-प्रारूप दस्तावेज़ीकरण". Git documentation. Retrieved 13 January 2020.
  6. "सामान्य अंतर प्रारूप विशिष्टता". www.w3.org.
  7. Colin Percival, Naive differences of executable code, http://www.daemonology.net/bsdiff/, 2003.
  8. "rpmdelta/delta.c". rpm-software-management. 3 July 2019. Retrieved 13 January 2020.
  9. Anonymous (May 2016). "फ्रीबीएसडी अद्यतन घटकों के विरुद्ध गैर-क्रिप्टैनालिटिक हमले". GitHub Gist.
  10. "xtraeme/bsdiff-chromium: README.chromium". GitHub (in English). 2012.; "courgette/third_party/bsdiff/README.chromium - chromium/src". Git at Google.; "android/platform/external/bsdiff/". Git at Google.
  11. "History for freebsd/usr.bin/bsdiff". GitHub.
  12. "Package: bsdiff". Debian Patch Tracker.
  13. Klode, Julian. "julian-klode/ddelta". GitHub. Retrieved 13 January 2020.


बाहरी संबंध

  • RFC 3229 – Delta Encoding in एचटीटीपी