ترميز دلتا
ترميز دلتا هو طريقة لتخزين أو نقل البيانات على شكل اختلافات (دلتا) بين البيانات المتسلسلة بدلاً من الملفات الكاملة؛ ويُعرف هذا عمومًا باسم تفاضل البيانات . يُطلق على ترميز دلتا أحيانًا اسم ضغط دلتا ، خاصةً عندما تكون هناك حاجة إلى سجلات تاريخية للتغييرات (مثل برامج التحكم في الإصدارات ).
تُسجَّل الاختلافات في ملفات منفصلة تُسمى "دلتا" أو "فرق". في الحالات التي تكون فيها الاختلافات طفيفة - على سبيل المثال، تغيير بضع كلمات في مستند كبير أو تغيير بضعة سجلات في جدول كبير - يُقلل ترميز الدلتا بشكل كبير من تكرار البيانات. وتُعد مجموعات الدلتا الفريدة أكثر كفاءة في استخدام المساحة من نظيراتها غير المُرمَّزة.
من وجهة نظر منطقية، يُمثل الفرق بين قيمتين من البيانات المعلومات اللازمة للحصول على إحداهما من الأخرى - انظر الإنتروبيا النسبية . ويُطلق على الفرق بين القيم المتطابقة (في ظل تكافؤ معين ) غالبًا اسمأو العنصر المحايد.
مثال رقمي
لعل أبسط مثال على ذلك هو تخزين قيم البايتات كفروقات (دلتا) بين القيم المتسلسلة، بدلاً من القيم نفسها. لذا، بدلاً من، كنا سنخزنيقلل هذا من تباين (نطاق) القيم عند وجود ارتباط بين العينات المتجاورة، مما يسمح باستخدام عدد أقل من البتات لنفس البيانات. يطبق تنسيق الصوت IFF 8SVX هذا التشفير على بيانات الصوت الخام قبل ضغطها. حتى أن بعض عينات الصوت ذات 8 بت لا تُضغط بشكل أفضل عند استخدام تشفير دلتا، وتكون فائدة تشفير دلتا أقل بالنسبة للعينات ذات 16 بت وما فوق. لذلك، غالبًا ما تختار خوارزميات الضغط استخدام تشفير دلتا فقط عندما يكون الضغط أفضل من الضغط بدونه. مع ذلك، في ضغط الفيديو ، يمكن لإطارات دلتا أن تقلل حجم الإطار بشكل كبير، وتُستخدم في جميع برامج ترميز ضغط الفيديو تقريبًا . تتطلب هذه الإطارات نوعًا مختلفًا من حساب دلتا .
تعريف
رقمي
يُعرَّف الفرق بين القيم العددية ببساطة عن طريق الطرح، كما هو موضح في المثال أعلاه. وبسبب خاصية العمليات الحسابية، فإن الفرق العددي متناظر : إذا كانت القيمة الأخيرةإذا كان معروفًا، فمن الممكن تطبيق دلتابالعكس للحصول على القيمة السابقة.
من الممكن أيضًا إنتاج "فرق عددي بين الفروق". قد يكون هذا مفيدًا إذا تم توليد البيانات الأساسية بواسطة عملية تشبهلأن دالة دلتا من الدرجة الثانية تُسطّح البيانات إلى سلسلة من الأصفار. وغالبًا ما تتصرف الطوابع الزمنية بهذه الطريقة. [ 1 ] بل إن دوال دلتا من الرتب الأعلى قد تكون مفيدة لبيانات الحياة الواقعية: على سبيل المثال، تُضغط المسافة المقاسة ( المدى الزائف ) إلى قمر صناعي للملاحة بمرور الوقت بشكل أفضل باستخدام دالة دلتا من الدرجة الثالثة، وهي "دالة دلتا من دلتا من دلتا". [ 2 ]
إضافةً إلى الطرح، تُنتج عملية XOR (أو الحصرية الثنائية ) فرقًا متناظرًا. غالبًا ما تستخدم قواعد بيانات السلاسل الزمنية عملية XOR كفرق بين أعداد الفاصلة العائمة، لأنها تُنتج فروقًا قابلة للضغط بسهولة تتكون في معظمها من بتات صفرية. [ 1 ]
ثمة طريقة أخرى تتمثل في تغيير المسافة بين العناصر المستخدمة في عملية دلتا: بدلاً من حسابفي التسلسل، سيتم حساب دلتا "المسافة-2"يظهر هذا في مرشح "دلتا" الخاص بـ xz . [ 3 ]
نموذج كود C
يقوم كود C التالي بتنفيذ شكل بسيط من ترميز وفك ترميز دلتا على سلسلة من الأحرف:
void encode ( uint8_t buffer [], size_t length ) { uint8_t last = 0 ; for ( size_t i = 0 ; i < length ; ++ i ) { uint8_t current = buffer [ i ]; buffer [ i ] = current - last ; last = current ; } }void decode ( uint8_t buffer [], size_t length ) { uint8_t last = 0 ; for ( size_t i = 0 ; i < length ; ++ i ) { uint8_t delta = buffer [ i ]; buffer [ i ] = delta + last ; last = buffer [ i ]; } }المجموعات
بالنسبة للفرق بين سلاسل أو مجموعات من القيم (مثل سلاسل الأحرف والصور)، يمكن تعريف دلتا بطريقتين: دلتا متناظرة ودلتا موجهة . تتضمن دلتا المتناظرة بين مجموعتين معلومات كافية لجعلها قابلة للعكس.
يُعرَّف الفرق بين سلسلتين بشكل مماثل، باستثناء إضافة معلومات لتحديد مواقع الإضافات والحذوفات. في تطبيقات الحاسوب، يُوضَّح ذلك من خلال مخرجات الأمر diff (في الوضع الافتراضي والموحد والسياقي): تعليمات على شكل "في الموضع".استبدل (المحتوى القديم) بـ (المحتوى الجديد).
دلتا الموجهة ، وتسمى أيضًا التغيير، هي سلسلة من عمليات التغيير (الأولية) التي عند تطبيقها على، مما ينتج عنه آخر،(لاحظ التطابق مع سجلات المعاملات في قواعد البيانات). في تطبيقات الحاسوب، عادةً ما تأخذ هذه السجلات شكل لغة برمجة تتضمن أمرين: نسخ البيانات منوكتابة البيانات الحرفية . مثال على ذلك هو ناتج الأمر diff في وضع تحرير النص البرمجي .
المتغيرات
يُطلق على أحد أنواع ترميز دلتا، الذي يُرمّز الاختلافات بين البادئات أو اللواحق في السلاسل النصية ، اسم الترميز التزايدي . وهو فعال بشكل خاص مع القوائم المرتبة ذات الاختلافات الطفيفة بين السلاسل النصية، مثل قائمة الكلمات من قاموس .
مشاكل التنفيذ
تؤثر طبيعة البيانات المراد ترميزها على فعالية خوارزمية الضغط المحددة.
يعمل ترميز دلتا بشكل أفضل عندما يكون للبيانات تباين صغير أو ثابت؛ بالنسبة لمجموعة بيانات غير مرتبة، قد يكون من الممكن تحقيق ضغط ضئيل أو معدوم باستخدام هذه الطريقة.
في الإرسال المشفر بتقنية دلتا عبر شبكة لا تتوفر فيها سوى نسخة واحدة من الملف على كل طرف من قناة الاتصال، تُستخدم رموز خاصة للتحكم في الأخطاء للكشف عن أجزاء الملف التي تغيرت منذ إصداره السابق. على سبيل المثال، يستخدم برنامج rsync خوارزمية مجموع التحقق المتغيرة المستندة إلى خوارزمية مجموع التحقق adler-32 التي وضعها مارك أدلر .
أمثلة
ضغط دلتا الثنائي
التحديث التفاضلي هو تحديث برمجي يتطلب من المستخدم تنزيل الأجزاء الجديدة فقط من شفرة البرنامج ، أو الأجزاء التي طرأ عليها تغيير عن حالتها السابقة، بدلاً من تنزيل البرنامج بأكمله . يُمكن للتحديثات التفاضلية توفير قدر كبير من الوقت وعرض النطاق الترددي للحوسبة . يُشتق اسم "التفاضلي" من استخدام الحرف اليوناني دلتا (Δ أو δ) في العلوم الرياضية للدلالة على التغيير. [ 4 ]
يُعرف هذا الأسلوب التقني أيضًا باسم ضغط دلتا الثنائي. في كلتا الحالتين، يُستخدم مزيج من النسخة القديمة والنسخة المُنزّلة لإعادة بناء النسخة الجديدة. لمزيد من المعلومات حول التقنية المستخدمة لإنتاج الفروقات، راجع قسم "مقارنة البيانات" .
ترميز دلتا في بروتوكول HTTP
ومن الأمثلة الأخرى على استخدام ترميز دلتا RFC 3229 ، "ترميز دلتا في HTTP"، والذي يقترح أن تكون خوادم HTTP قادرة على إرسال صفحات الويب المحدثة في شكل اختلافات بين الإصدارات (دلتا)، مما يقلل من حركة مرور الإنترنت، حيث أن معظم الصفحات تتغير ببطء بمرور الوقت، بدلاً من إعادة كتابتها بالكامل بشكل متكرر:
توضح هذه الوثيقة كيفية دعم ترميز دلتا كامتداد متوافق مع HTTP/1.1.
تتسبب العديد من طلبات بروتوكول نقل النص التشعبي (HTTP) في استرجاع نسخ معدلة قليلاً من الموارد التي يمتلك العميل بالفعل نسخة مخزنة منها. وقد أظهرت الأبحاث أن هذه التحديثات المعدلة متكررة، وأن التعديلات عادةً ما تكون أصغر بكثير من الكيان الأصلي. في مثل هذه الحالات، سيُحسّن بروتوكول HTTP من استخدام عرض النطاق الترددي للشبكة إذا تمكن من نقل وصف مُختصر للتغييرات، بدلاً من النسخة الجديدة الكاملة للمورد.
[...] نعتقد أنه قد يكون من الممكن دعم rsync باستخدام إطار عمل "معالجة المثيل" الموضح لاحقًا في هذه الوثيقة، ولكن لم يتم العمل على ذلك بالتفصيل.
تم تطبيق إطار العمل المقترح القائم على rsync في نظام rproxy كزوج من وكلاء HTTP. [ 5 ] ومثل التطبيق الأساسي القائم على vcdiff، نادرًا ما يُستخدم كلا النظامين.
نسخ دلتا
النسخ التفاضلي هو طريقة سريعة لنسخ ملف تم تعديله جزئيًا، في حال وجود نسخة سابقة منه في الموقع المستهدف. في النسخ التفاضلي، يتم نسخ الجزء المُعدَّل فقط من الملف. يُستخدم عادةً في برامج النسخ الاحتياطي أو نسخ الملفات ، غالبًا لتوفير عرض النطاق الترددي عند النسخ بين أجهزة الكمبيوتر عبر شبكة خاصة أو الإنترنت. ومن الأمثلة البارزة مفتوحة المصدر برنامج rsync . [ 6 ] [ 7 ] [ 8 ]
النسخ الاحتياطي عبر الإنترنت
تعتمد العديد من خدمات النسخ الاحتياطي عبر الإنترنت هذه المنهجية، المعروفة غالبًا باسم "التحديثات الجزئية" ، لتزويد مستخدميها بنسخ سابقة من الملف نفسه من نسخ احتياطية سابقة. يقلل هذا من التكاليف المرتبطة، ليس فقط من حيث كمية البيانات التي يجب تخزينها كإصدارات مختلفة (إذ يجب توفير كل نسخة معدلة من الملف للمستخدمين للوصول إليها)، بل أيضًا من حيث تكاليف تحميل (وأحيانًا تنزيل) كل ملف تم تحديثه (باستخدام التحديث الجزئي الأصغر فقط، بدلًا من الملف بأكمله).
تحديثات دلتا
بالنسبة لحزم البرامج الكبيرة، عادةً ما تكون التغييرات في البيانات بين الإصدارات قليلة. يختار العديد من الموردين استخدام عمليات نقل البيانات التفاضلية لتوفير الوقت وعرض النطاق الترددي.
الفرق
برنامج Diff هو برنامج لمقارنة الملفات، ويُستخدم بشكل أساسي مع الملفات النصية. افتراضيًا، يُنشئ البرنامج فروقًا متناظرة قابلة للعكس. يُستخدم تنسيقان لتصحيحات البرامج ، وهما: context و unified ، حيث يوفر أحدهما أسطر سياق إضافية تسمح بتجاوز تغييرات أرقام الأسطر.
جيت
يستخدم نظام التحكم في شفرة المصدر Git ضغط دلتا في عملية " إعادة تجميع Git " المساعدة. تُقارن الكائنات الموجودة في المستودع والتي لم تُضغط دلتا بعد ("الكائنات غير المضغوطة") مع مجموعة فرعية مختارة تجريبيًا من جميع الكائنات الأخرى، وتُدمج البيانات المشتركة والاختلافات في "ملف تجميع" يُضغط بعد ذلك باستخدام الطرق التقليدية. في حالات الاستخدام الشائعة، حيث تتغير ملفات المصدر أو البيانات تدريجيًا بين عمليات الالتزام، يمكن أن يؤدي ذلك إلى توفير كبير في المساحة. تُنفذ عملية إعادة التجميع عادةً كجزء من عملية "جمع البيانات المهملة" [ 9 ] ، والتي تُفعّل تلقائيًا عندما يتجاوز عدد الكائنات غير المضغوطة أو ملفات التجميع الحدود المُحددة.
تم توثيق هذا التنسيق في صفحة تنسيق الحزمة في وثائق Git. وهو يطبق دلتا موجهة. [ 10 ]
VCDIFF
أحد التنسيقات العامة لترميز دلتا الموجه هو VCDIFF، الموصوف في RFC 3284. وتشمل تطبيقات البرامج المجانية Xdelta و open-vcdiff.
GDIFF
يُعد تنسيق الفرق العام (GDIFF) تنسيقًا آخر لترميز دلتا الموجه. وقد تم تقديمه إلى اتحاد شبكة الويب العالمية (W3C) في عام 1997. [ 11 ] في كثير من الحالات، يتمتع تنسيق VCDIFF بمعدل ضغط أفضل من تنسيق GDIFF.
bsdiff
Bsdiff هو برنامج لمقارنة الملفات الثنائية باستخدام فرز اللواحق . بالنسبة للملفات التنفيذية التي تحتوي على تغييرات كثيرة في عناوين المؤشرات، فإنه يتفوق في الأداء على ترميزات "النسخ والحرفية" من نوع VCDIFF. الهدف هو إيجاد طريقة لإنشاء فرق صغير دون الحاجة إلى تحليل كود التجميع (كما في برنامج Courgette من جوجل). يحقق Bsdiff ذلك من خلال السماح بمطابقات "النسخ" مع وجود أخطاء، والتي يتم تصحيحها باستخدام مصفوفة "إضافة" إضافية للفروقات على مستوى البايت. نظرًا لأن هذه المصفوفة تحتوي في الغالب على أصفار أو قيم مكررة لتغييرات الإزاحة، فإنها تشغل مساحة صغيرة بعد الضغط. [ 12 ]
يُعدّ Bsdiff مفيدًا لتحديثات دلتا. تستخدمه جوجل في كلٍّ من كروميوم وأندرويد. تعتمد ميزة deltarpm في مدير حزم RPM على نسخة معدّلة من Bsdiff تستخدم جدول تجزئة للمطابقة. [ 13 ] كما يستخدم نظام FreeBSD أيضًا Bsdiff للتحديثات. [ 14 ]
منذ إصدار النسخة 4.3 من برنامج bsdiff عام 2005، أُجريت عليه تحسينات وإصلاحات عديدة. تحتفظ جوجل بنسخ متعددة من الكود لكل منتج من منتجاتها. [ 15 ] يتبنى نظام FreeBSD العديد من التغييرات المتوافقة التي أدخلتها جوجل، وأهمها إصلاح ثغرة أمنية والتحول إلى divsufsortروتين فرز اللواحق الأسرع. [ 16 ] أما نظام Debian، فقد أدخل سلسلة من التحسينات على أداء البرنامج. [ 17 ]
ddelta هي نسخة مُعاد كتابتها من bsdiff، مُقترحة للاستخدام في تحديثات دلتا لنظام دبيان. ومن بين تحسينات الكفاءة الأخرى، تستخدم نافذة منزلقة لتقليل استهلاك الذاكرة ووحدة المعالجة المركزية. [ 18 ]
انظر أيضاً
- مقارنة البيانات – طريقة لضغط التغيرات بمرور الوقت
- دلتا متداخلة
- نظام التحكم في شفرة المصدر – نظام التحكم في إصدارات شفرة المصدر
- مشكلة تصحيح السلاسل النصية
- إكس دلتا : مُشفِّر دلتا مفتوح المصدر
مراجع
- 1 2 "شرح خوارزميات ضغط السلاسل الزمنية" . مدونة تايجر داتا . 22 أبريل 2020.
- ↑ هاتاناكا، يوكي (2008). "تنسيق ضغط وأدوات لبيانات رصد نظام الملاحة العالمي عبر الأقمار الصناعية" (ملف PDF) . نشرة معهد المسح الجغرافي . 55 : 21-30 . تاريخ الاسترجاع : 25 سبتمبر 2020 .
- ↑ – مرجع الصدفة والأدوات المساعدة، مواصفات يونكس الموحدة ، الإصدار 5 من مجموعة Open Group "--delta[=options] ... الخيارات المدعومة: dist=distance حدد مسافة حساب دلتا بالبايت. يجب أن تكون المسافة بين 1 و256.
- ↑ مولين، شون (25 أبريل 2017). "ما هو دلتا في الرياضيات؟" . ساينسينغ . ليف جروب ميديا . تم الاسترجاع في 6 سبتمبر 2022. دلتا
... تعني "التغيير" أو "التغيير في" في الرياضيات.
- ↑ "rproxy: مقدمة" . rproxy.samba.org .
- ↑ "طلب ميزة: النسخ التفاضلي - 2BrightSparks" . مؤرشف من الأصل بتاريخ 13 مارس 2016. تم الاطلاع عليه بتاريخ 29 أبريل 2016 .
- ↑ "Bvckup 2 | المنتدى | كيف تعمل عملية النسخ التفاضلي" .
- ↑
- ↑ "Git - git-gc Documentation" . git-scm.com . تم الاطلاع عليه في 9 نوفمبر 2024 .
- ↑ "Git - pack-format Documentation" . وثائق Git . تم الاطلاع عليه بتاريخ 13 يناير 2020 .
- ↑ "مواصفات تنسيق الفرق العام" . www.w3.org .
- ↑ "الفرق الثنائي" . www.daemonology.net . تم الاطلاع عليه بتاريخ 9 نوفمبر 2024 .
- ↑ "rpmdelta/delta.c" . إدارة برامج rpm. 3 يوليو 2019. تم الاطلاع عليه في 13 يناير 2020 .
- ↑ مجهول (مايو 2016). "هجمات غير تحليلية للشفرات ضد مكونات تحديث نظام FreeBSD" . GitHub Gist .
- ↑ "xtraeme/bsdiff-chromium: README.chromium" . GitHub . 2012.; "courgette/third_party/bsdiff/README.chromium - chromium/src" . Git at Google .; "android/platform/external/bsdiff/" . Git at Google .
- ↑ "سجل التغييرات لملف freebsdd/usr.bin/bsdiff" . GitHub .
- ↑ "الحزمة: bsdiff" . متتبع تصحيحات دبيان .
- ↑ كلود، جوليان. "جوليان كلود/ددلتا" . جيثب . تم الاسترجاع في 13 يناير 2020 .
روابط خارجية
- RFC 3229 – ترميز دلتا في HTTP
- خوارزميات الضغط بدون فقدان البيانات
- تفاضل البيانات
- ضغط البيانات
