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

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

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

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

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

परिभाषा
डेल्टा को 2 विधियों से परिभाषित किया जा सकता है, सममित डेल्टा और निर्देशित डेल्टा एक सममित डेल्टा को इस प्रकार व्यक्त किया जा सकता है
 * $$\Delta(v_1, v_2) = (v_1 \setminus v_2) \cup (v_2 \setminus v_1),$$

जहाँ $$v_1$$ और $$v_2$$ दो संस्करणों का प्रतिनिधित्व करें।

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

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

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

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

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

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

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

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

"यह दस्तावेज़ बताता है कि डेल्टा एन्कोडिंग को HTTP/1.1 के संगत एक्सटेंशन के रूप में कैसे समर्थित किया जा सकता है।

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

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

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

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

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

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

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

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

प्रारूप को गिट दस्तावेज़ के पैक-प्रारूप पृष्ठ में प्रलेखित किया गया है। यह एक निर्देशित डेल्टा प्रयुक्त करता है।

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

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

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

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

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

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

यह भी देखें

 * डेटा अंतर
 * इंटरलीव्ड डेल्टा
 * स्रोत कोड नियंत्रण प्रणाली
 * स्ट्रिंग-टू-स्ट्रिंग सुधार समस्या
 * एक्सडेल्टा: ओपन-सोर्स डेल्टा एनकोडर

बाहरी संबंध

 * – Delta Encoding in एचटीटीपी