Кіріспе

Деректерді беру әдісінің түрі. Дельта кодтау – толық файлдардың орнына, тізбектелген деректер арасындағы айырмашылықтар (дельталар) түрінде деректерді сақтау немесе беру әдісі; жалпырақ айтқанда, бұл деректерді салыстыру деп аталады. Дельта кодтау кейде дельта сығымдалу деп те аталады, әсіресе өзгерістердің архивілік тарихын сақтау қажет болған жағдайда (мысалы, нұсқаларды басқару бағдарламалық құралдарында). Айырмашылықтар "дельта" немесе "дифф" деп аталатын жеке файлдарда тіркеледі. Егер айырмашылықтар шағын болса – мысалы, үлкен құжатта бірнеше сөздің өзгеруі немесе үлкен кестеде бірнеше жазбаның өзгеруі – дельта кодтау деректердегі қайталануды едәуір төмендетеді. Бірегей дельталар жинағы, кодталмаған нұсқаларымен салыстырғанда, жадты тиімдірек пайдаланады. Логикалық тұрғыдан алғанда, екі дерек мәні арасындағы айырмашылық – бұл бір мәнді екіншісінен алу үшін қажетті ақпарат. Теңдей мәндер арасындағы айырмашылық (кейбір сәйкестік бойынша) көбінесе 0 немесе бейтарап элемент деп аталады.

Қарапайым мысал

Мүмкін, ең қарапайым мысал – байттардың мәндерін өзінің мәндері емес, тізбектелген мәндер арасындағы айырмашылықтар (делталар) түрінде сақтау. Яғни, 2, 4, 6, 9, 7 орнына 2, 2, 2, 3, −2 сақталады. Бұл, көршілес үлгілер корреляцияланған кезде мәндердің дисперсиясын (диапазонын) азайтады, соның салдарынан бірдей деректер үшін аз биттерді пайдалануға мүмкіндік береді. IFF 8SVX дыбыс форматы осы кодтауды ширатуды қолданғанға дейін, шикі дыбыс деректеріне қолданады. Дельта кодталғанда барлық 8 биттік дыбыс үлгілері де жақсы ширатылмайды, ал 16 биттік және одан да жоғары сапалы үлгілер үшін дельта кодтаудың тиімділігі одан да төмен. Сондықтан, ширату алгоритмдері көбінесе дельта кодтауды тек ширату одан жақсы болған жағдайда ғана таңдайды. Алайда, бейне ширатуда дельта кадрлар кадрдың көлемін айтарлықтай азайта алады және дерлік барлық бейне ширату кодектерінде қолданылады.

Анықтама

Дельтаны екі түрде анықтауға болады: симметриялық дельта және бағытталған дельта. Симметриялық дельта мына түрде көрсетілуі мүмкін:

мұнда және екі нұсқаны білдіреді. Бағытталған дельта, сондай-ақ өзгеріс деп те аталады, – бір нұсқаны екінші нұсқаға айналдыру үшін қолданылатын (элементарлық) өзгерістер тізбегі (қолдану журналдарына (transaction logs) ұқсастығын ескеріңіз). Компьютерде іске асыру кезінде олар көбінесе екі командасы бар тіл түрінде болады: v1 нұсқасынан деректерді көшіру және тікелей деректерді жазу.

Нұсқалар

Дельта кодтамасының нұсқасы, жолдардың префикстері немесе суфикстері арасындағы айырмашылықтарды кодтайтын, инкрементті кодтама деп аталады. Бұл, әсіресе, сөздіктегі сөздер тізімі сияқты, жолдар арасындағы шағын айырмашылықтары бар реттелген тізімдер үшін тиімді.

Орындау мәселелері

Кодталатын деректердің сипаты нақты бір сығылу алгоритмінің тиімділігіне әсер етеді. Дельта кодтау деректердің өзгеруі шағын немесе тұрақты болғанда ең жақсы нәтиже береді; ретсіз деректер жинағы үшін бұл әдіспен сығылуға мүмкіндік болмауы мүмкін. Желі арқылы дельта кодталған деректерді жіберу кезінде, егер байланыс арнасының екі шетінде де файлдың тек бір ғана көшірмесі болса, файлдың бұрынғы нұсқасымен салыстырғанда қандай бөліктері өзгергенін анықтау үшін арнайы қателіктерді бақылау кодтары қолданылады. Мысалы, rsync Марк Адлердің Adler 32 тексеру сомасына негізделген, жылмалы тексеру сомасының алгоритмін пайдаланады.

Дельта көшірмелеу

Дельта көшірмелеу – бұл бұрынғы нұсқасы мақсатты жерде болған файлды, жартылай өзгерген күйінде көшірудің жылдам әдісі. Дельта көшірмелеу кезінде файлдың тек өзгертілген бөлігі ғана көшіріледі. Ол көбінесе резервтік көшірме жасау немесе файлдарды көшіру бағдарламаларында қолданылады, әсіресе жеке желі немесе интернет арқылы компьютерлер арасында көшіру кезінде трафикті үнемдеу үшін пайдаланылады. Белгілі бір ашық кодты мысал – rsync.

Желідегі сақтық көшірме

Көптеген онлайн-сақтық көшірме қызметтері осы әдістемені қолданады, оны көбінесе "дельта" деп атайды, пайдаланушыларға бұрынғы сақтық көшірмелерден бірдей файлдың ескі нұсқаларын ұсыну үшін. Бұл сақталуға тиіс деректер көлемін азайтады, өйткені файлдың әр өзгертілген нұсқасының толық көшірмесін пайдаланушыларға қолжетімді етудің қажеті жоқ. Сонымен қатар, жаңартылған әрбір файлды жүктеу (кейде жүктеу) шығындары да төмендейді, себебі бүкіл файлдың орнына тек кішкентай дельта қолданылады.

Дельта жаңартулары

Үлкен бағдарламалық пакеттерде, әдетте, нұсқалар арасындағы өзгерістер аз болады. Көптеген жеткізушілер уақытты және трафикті үнемдеу үшін дельта жүктеулерді пайдалануды қалайды.

Айырма

Diff – файлдарды салыстыру бағдарламасы, көбінесе мәтіндік файлдармен жұмыс істейді. Дәстүрлі түрде, ол кері қайтарылатын симметриялық айырмашылықтарды (дельталарды) жасайды. Бағдарламалық қамтамасты жаңартуға арналған екі формат – контексттік және біріктірілген – жол нөмірінің өзгеруіне төзімділікті қамтамасыз ететін қосымша контексттік жолдарды ұсынады.

Қалқа

Git бастапқы кодты басқару жүйесі дельталық сығылуды қосымша "git repack" операциясы арқылы қолданады. Репозиторийдегі әлі дельталық сығылмаған ("бос объектілер") объектілер, барлық басқа объектілердің эвристикалық түрде таңдалған бір бөлігімен салыстырылады, ортақ деректер мен айырмашылықтар біріктіріліп "жинақталған файлға" (pack file) сақталады, содан кейін ол стандартты әдістермен сығылады. Көбінесе, бастапқы код немесе дерек файлдары коммиттер арасында ұсақ өзгерістерге ұшыраған жағдайларда, бұл орынды үнемдеуге мүмкіндік береді. "Git repack" операциясы әдетте "git gc" процесінің бір бөлігі ретінде жүзеге асырылады, ол бос объектілердің немесе жинақталған файлдардың саны белгіленген шектен асқанда автоматты түрде іске қосылады. Форматы Git құжаттамасының жинақталған файл форматы (pack format) бетінде сипатталған. Ол бағытталған дельтаны (directed delta) жүзеге асырады.

VCDIFF

Бағытталған дельта кодтамасының бір жалпы форматы VCDIFF болып табылады, ол RFC 3284 стандартында сипатталған. Ашық кодты бағдарламалық жасақтамалардың ішінде Xdelta және open vcdiff бар.

GDIFF

Жалпы диф формат (GDIFF) – тағы бір бағытталған дельта кодтау форматы. Ол 1997 жылы W3C ұйымына ұсынылды. Көп жағдайда VCDIFF, GDIFF-ке қарағанда жақсы сығымдайды.

bсdiff

Bsdiff – жұрнақтарды сұрыптауды қолданатын екілік айырмашылықты табу бағдарламасы. Пойнтерлік мекенжайларда көп өзгерістер болатын орындалатын файлдар үшін VCDIFF типті "көшіру және тура" кодтамаларынан жақсы жұмыс істейді. Мақсаты – құрастыру кодын талдау қажеттілігінсіз кішкентай айырмашылықты жасау жолын табу (Google-дің Courgette бағдарламасындай). Bsdiff мұны қателермен "көшіру" сәйкестіктеріне рұқсат беру арқылы іске асырады, содан кейін олар байттық айырмашылықтардың қосымша "қосу" массивін пайдалана отырып түзетіледі. Бұл массив көбінесе нөлдерден немесе ауытқу өзгерістерінің қайталама мәндерінен тұратындықтан, сығылғаннан кейін аз орын алады. Bsdiff дельта жаңартулар үшін пайдалы. Google Chromium және Android жүйелерінде bsdiff-ті қолданады. RPM пакеттік менеджерінің deltarpm мүмкіндігі сәйкестікті табу үшін хэш-кестелерді қолдана алатын күрт өзгертілген bsdiff негізінде құрылған. FreeBSD да жаңартулар үшін bsdiff-ті пайдаланады. 2005 жылғы bsdiff 4.3 нұсқасынан бері оған түрлі жақсартулар мен түзетулер енгізілді. Google әрбір өнімі үшін кодтың бірнеше нұсқасын сақтайды. FreeBSD Google-дің көптеген үйлесімді өзгерістерін, әсіресе қауіпсіздік бұзушылықтарын жоюды және жылдам жұрнақ сұрыптау әдісіне ауысуды қабылдайды. Debian бағдарламаның өнімділігін жақсартуға бағытталған бірқатар өзгерістерді енгізді. ddelta – Debian жүйесіндегі дельта жаңартуларында пайдалану үшін ұсынылған bsdiff-тің қайта жазылған нұсқасы. Басқа тиімділіктерді арттырулармен қатар, ол жад пен процессордың жүктемесін азайту үшін жылдам жылжитын терезені қолданады.