الحشيش الملفوف

التجزئة المتدحرجة (المعروفة أيضًا باسم التجزئة المتكررة أو مجموع التحقق المتدحرج) هي دالة تجزئة حيث يتم تجزئة المدخلات في نافذة تتحرك عبر المدخلات.

تسمح بعض وظائف التجزئة بحساب التجزئة المتداولة بسرعة كبيرة - يتم حساب قيمة التجزئة الجديدة بسرعة بالنظر فقط إلى قيمة التجزئة القديمة، والقيمة القديمة التي تمت إزالتها من النافذة، والقيمة الجديدة التي تمت إضافتها إلى النافذة - على غرار الطريقة التي يمكن بها حساب دالة المتوسط ​​المتحرك بسرعة أكبر بكثير من مرشحات التمرير المنخفض الأخرى؛ وعلى غرار الطريقة التي يمكن بها تحديث تجزئة Zobrist بسرعة من قيمة التجزئة القديمة.

من أبرز تطبيقاتها خوارزمية البحث عن السلاسل النصية رابين-كارب ، التي تستخدم التجزئة المتغيرة الموضحة أدناه. ومن التطبيقات الشائعة الأخرى برنامج rsync ، الذي يستخدم مجموعًا اختباريًا مبنيًا على خوارزمية adler-32 لمارك أدلر كتجزئة متغيرة. يستخدم نظام ملفات الشبكة منخفض النطاق الترددي (LBFS) بصمة رابين كتجزئة متغيرة. أما FastCDC (التجزئة السريعة المحددة المحتوى) فيستخدم بصمة Gear ذات الكفاءة الحسابية العالية كتجزئة متغيرة.

في أفضل الأحوال، تكون قيم التجزئة المتغيرة مستقلة ثنائياً [ 1 ] أو عالمية بقوة . لا يمكن أن تكون مستقلة ثلاثياً ، على سبيل المثال.

حشيش متدحرج متعدد الحدود

غالباً ما يتم شرح خوارزمية البحث عن السلاسل النصية لرابين -كارب باستخدام دالة تجزئة متدحرجة لا تستخدم سوى عمليات الضرب والجمع:

ح=ج1أك-1+ج2أك-2+ج3أك-3+...+جكأ0{\displaystyle H=c_{1}a^{k-1}+c_{2}a^{k-2}+c_{3}a^{k-3}+...+c_{k}a^{0}}،

أينأ{\displaystyle a}ثابت، وج1،...،جك{\displaystyle c_{1},...,c_{k}}هي الأحرف المدخلة (لكن هذه الوظيفة ليست بصمة رابين ، انظر أدناه).

لتجنب التلاعب بالبيانات الضخمةح{\displaystyle H}القيم، جميع العمليات الحسابية تتم باستخدام باقي القسمةن{\displaystyle n}اختيارأ{\displaystyle a}ون{\displaystyle n}يُعدّ الحصول على تجزئة جيدة أمرًا بالغ الأهمية؛ وخاصةً المعامل.ن{\displaystyle n}عادةً ما يكون عددًا أوليًا . انظر مولد التوافق الخطي لمزيد من التفاصيل.

تتضمن عملية إزالة الأحرف وإضافتها ببساطة جمع أو طرح الحد الأول أو الأخير. أما إزاحة جميع الأحرف بمقدار خانة واحدة إلى اليسار فتتطلب ضرب المجموع بأكمله.ح{\displaystyle H}بواسطةأ{\displaystyle a}يتطلب تحريك جميع الأحرف بمقدار موضع واحد إلى اليمين قسمة المجموع الكليح{\displaystyle H}بواسطةأ{\displaystyle a}لاحظ أنه في حساب باقي القسمة،أ{\displaystyle a}يمكن اختيارها بحيث يكون لها معكوس ضربيأ-1{\displaystyle a^{-1}}والتي من خلالهاح{\displaystyle H}يمكن ضربها للحصول على نتيجة القسمة دون إجراء عملية قسمة فعلية.

بصمة رابين

بصمة رابين هي دالة تجزئة أخرى، تُفسر المدخلات أيضًا على أنها متعددة حدود، ولكن على حقل غالوا GF(2) . فبدلًا من اعتبار المدخلات متعددة حدود من البايتات، تُعتبر متعددة حدود من البتات، وتُجرى جميع العمليات الحسابية في GF(2) (على غرار CRC-32 ). وتُمثل دالة التجزئة باقي قسمة متعددة الحدود هذه على متعددة حدود غير قابلة للاختزال على GF(2). ويمكن تحديث بصمة رابين باستخدام بايت الدخول وبايت الخروج فقط، مما يجعلها فعليًا دالة تجزئة متغيرة. [ 2 ]

ولأنها تشترك في نفس المؤلف مع خوارزمية بحث السلاسل رابين-كارب، والتي غالباً ما يتم شرحها باستخدام دالة تجزئة متدحرجة أخرى أبسط، ولأن دالة التجزئة المتدحرجة الأبسط هذه هي أيضاً متعددة الحدود، فإن كلا دالتي التجزئة المتدحرجة غالباً ما يتم الخلط بينهما. [ 3 ]

كثير الحدود الدوري

التجزئة باستخدام كثير الحدود الدوري [ 4 ] - والتي تُسمى أحيانًا Buzhash [ 5 ] - بسيطة أيضًا، وتتميز بتجنب عمليات الضرب، حيث تستخدم الإزاحة الدائرية بدلاً منها. وهي شكل من أشكال تجزئة الجدولة : إذ تفترض وجود دالة استبدال.s{\displaystyle s}من الأحرف إلى الأعداد الصحيحة في الفترة[0،2L){\displaystyle [0,2^{L})}، وهو في الأساس جدول بحث (يجب أن تكون كل خانة من خانات البت الـ 32 لقيم s متوازنة، أي أن تحتوي على عدد من الآحاد يساوي عدد الأصفار). لنفترض أن الدالةرول{\displaystyle \operatorname {rol} }يكون دورانًا ثنائيًا . على سبيل المثال،رول(101)=011{\displaystyle \operatorname {rol} (101)=011}. يترك{\displaystyle \oplus }ليكن .جأنا{\displaystyle c_{i}}ليكن البايت رقم i في دفق البيانات، وw{\displaystyle w}يكون حجم النافذة المستخدم.

نقوم بالحساب المسبقs{\displaystyle s'}لإزالة مساهمة بايت خارج النافذة: [ 4 ] : ​​الجدول الثالث

s[أنا]=رول(s[أنا]،w){\displaystyle s'[i]=\operatorname {rol} (s[i],w)}

تُعرَّف قيم التجزئة وفقًا لعلاقة التكرار التالية: [ 4 ] : ​​الجدول الثالث

حأنا={0لو أنا=0رول(حأنا-1،1)s[جأنا]لو أناwرول(حأنا-1،1)s[جأنا]s[جأنا-w]لو أنا>w{\displaystyle H_{i}={\begin{cases}0&{\text{إذا كان }}i=0\\\operatorname {rol} (H_{i-1},1)\oplus s[c_{i}]&{\text{إذا كان }}i\leq w\\\operatorname {rol} (H_{i-1},1)\oplus s[c_{i}]\oplus s'[c_{iw}]&{\text{إذا كان }}i>w\end{cases}}}

جميع قيم H تقع ضمن الفترة[0،2L){\displaystyle [0,2^{L})}تصف هذه العلاقة التكرارية طريقة حساب التجزئة بطريقة متجددة: [ 4 ] : ​​الجدول الثالث

  • تم تهيئة التجزئة عند القيمة 0.
  • عند ملء النافذة، تتضمن إضافة حرف تدوير التجزئة القديمة إلى اليسار بمقدار موضع واحد وإجراء عملية XOR على التجزئة الجديدة.s[جأنا]{\displaystyle s[c_{i}]}.
  • عندما تمتلئ النافذة، يتم استخدام نفس الإجراء لإضافة حرف، متبوعًا بإزالة مساهمة الحرف الموجود خارج النافذة عن طريق عملية XOR.s[جأنا-w]{\displaystyle s'[c_{iw}]}.

إن قيمة H ليست منتظمة رسميًا ولا عالمية من الدرجة الثانية، على الرغم من انتظامها التجريبي. ومع ذلك، يمكن جعلها منتظمة رسميًا ومستقلة ثنائيًا إذا كان هناك عدد متتالٍ فقطL-w+1{\displaystyle L-w+1}تُؤخذ البتات من التجزئة. عمليًا، يمكن أن تكون هذه عملية AND منطقية (عملية إخفاء):حأنا=حأناو(1(w-1)-1){\displaystyle H'_{i}=H_{i}\mathbin {\&} (1\ll (w-1)-1)}، أينو{\displaystyle \mathbin {\&} }هي عملية AND ثنائية و{\displaystyle \ll }هو إزاحة إلى اليسار. [ 1 ]

بالإضافة إلى ذلك، يشير مؤلفو borg إلى أنه لا ينبغي أن يكون w من مضاعفات 2L إذا تم استخدام بذرة لتعديل s[] عن طريق إجراء عملية XOR بين كل قيمة والبذرة. [ 6 ]

تجزئة المعدات

يُعدّ تجزئة البيانات باستخدام Gear نوعًا آخر من أنواع التجزئة الجدولية. لنفترض أن s عبارة عن جدول ثابت يحتوي على 256 عددًا صحيحًا عشوائيًا غير مُوقّع من 32 بت، وأن H هو مُجمِّع التجزئة (عدد صحيح غير مُوقّع، 32 بت على الأقل)، وأن f هو الملف المُمثَّل كمصفوفة من البايتات (أعداد صحيحة من 8 بت، فهرس يبدأ من 1).{\displaystyle \ll }ليكن عامل الإزاحة إلى اليسار. العلاقة التكرارية هي: [ 7 ]

ح0=0{\displaystyle H_{0}=0}
حأنا=(حأنا-11)+s[و[أنا]]{\displaystyle H_{i}=(H_{i-1}\ll 1)+s[f[i]]}

بالمقارنة مع دالة التجزئة متعددة الحدود الدورية، تُستبدل عملية التدوير إلى اليسار بعملية الإزاحة إلى اليسار، مما يُلغي الحاجة إلى إزالة مساهمة البايتات خارج نطاق النافذة. كما تُستبدل عملية XOR بعملية الجمع. ويتم تقسيم البيانات إلى أجزاء بناءً على البتات العليا من H. يُنتج هذا النوع من التقسيم نتائج مماثلة لبصمة رابين في ثلث الوقت. [ 7 ] مع ذلك، عمليًا، كان توزيع أحجام الأجزاء المُقسّمة أوسع من توزيع رابين، مما جعل نتائج إزالة التكرارات أسوأ بنسبة 1% تقريبًا في الحالات النموذجية، و6% في أسوأ الحالات. [ 8 ]

يُعد استخدام البتات السفلية مقبولاً أيضاً ، ولكنه يُقلل من حجم النافذة المنزلقة الفعال. ويظهر أكبر حجم فعال عندما تأخذ القناع عينة من عدد من البتات غير المتتالية من "نطاق" واسع نسبياً من H. [ 8 ]

تقطيع المحتوى باستخدام التجزئة المتداولة

من الاستخدامات المثيرة للاهتمام لدالة التجزئة المتداولة قدرتها على إنشاء أجزاء ديناميكية من دفق أو ملف، بناءً على محتواه. وهذا مفيدٌ للغاية عند الحاجة إلى إرسال الأجزاء المتغيرة فقط من ملف كبير عبر الشبكة: فإضافة بايت بسيط في بداية الملف عادةً ما تؤدي إلى تحديث جميع النوافذ ذات الحجم الثابت، بينما في الواقع، يتم تعديل الجزء الأول فقط. [ 9 ]

تتمثل إحدى الطرق البسيطة لإنشاء أجزاء ديناميكية في حساب قيمة تجزئة متغيرة، وإذا تطابقت قيمة التجزئة مع نمط عشوائي (مثل جميع الأصفار) في البتات N السفلى (باحتمالية 0.00)12ن{\textstyle {1 \over 2^{n}}}إذا كان للتجزئة توزيع احتمالي منتظم، فسيتم اختيارها لتكون حدودًا للجزء. وبالتالي، سيكون لكل جزء حجم متوسط ​​قدره2ن{\textstyle 2^{n}}بايتات. يضمن هذا الأسلوب أن البيانات غير المعدلة (التي تبعد أكثر من حجم نافذة عن التغييرات) ستحتفظ بنفس الحدود. بمجرد معرفة الحدود، يجب مقارنة الأجزاء باستخدام قيمة التجزئة المشفرة للكشف عن التغييرات. [ 10 ]

يُستخدم تجزئة البيانات المُحددة بالمحتوى (CDC) أو التجزئة القائمة على المحتوى (CBC) غالبًا لإزالة البيانات المُكررة . [ 9 ] [ 11 ] يمكن أن تكون دالة التجزئة المُستخدمة أي خوارزمية تجزئة مُتغيرة. ومن الأمثلة على ذلك:

  • تقسيم البيانات إلى أجزاء أقل أهمية
    • مجموع غير مرجح (rsyncrypto) [ 12 ]
    • التجزئة المتدحرجة متعددة الحدود لرابين-كارب [ 10 ]
  • بصمة رابين، كما هو مستخدم في برنامج النسخ الاحتياطي restic (مع حجم بيانات يتراوح بين 512 كيلوبايت و 8 ميجابايت ونافذة 64 بايت). [ 9 ]
  • تقسيم البيانات إلى أجزاء بناءً على أي بتات متتالية
    • تُستخدم خوارزمية التجزئة الدورية (buzhash) في برنامج النسخ الاحتياطي Borg . يوفر Borg نطاقًا قابلًا للتخصيص لحجم أجزاء الملفات، وذلك بتغيير قيمة N (افتراضيًا بين 512 كيلوبايت و 8 ميجابايت ). [ 11 ] ويستخدم نافذة بحجم 4095 بايت [ 11 ] ودالة استبدال غير متوازنة. [ 13 ]
  • تقسيم أي مجموعة من البتات
    • تجزئة التروس. [ 7 ] تم تحسين CDC القائم على التروس بشكل متتابع، مما أدى إلى ظهور FastCDC وRapidCDC وQuickCDC. [ 14 ]

تتميز تقنية تجزئة الملفات بناءً على المحتوى بميزة أن التغييرات المحلية التي تُجرى على ملف ما، في معظم الحالات، لا تؤثر إلا على الجزء الذي يوجد فيه، وربما على الجزء التالي، دون التأثير على أي جزء آخر. وتوفر الخوارزميات وأنواع التجزئة المختلفة مستويات متفاوتة من قوة هذا الضمان.

تقطيع المحتوى باستخدام المجموع المتحرك

تقوم العديد من البرامج، بما في ذلك gzip (مع --rsyncableالخيار) و rsyncrypto، بتقسيم المحتوى بناءً على هذا المجموع المتحرك المحدد (غير المرجح): [ 12 ]

ح(ن)=أنا=ن-8195نجأناتعديل4096{\displaystyle H(n)=\sum _{i=n-8195}^{n}c_{i}\mod 4096}

أين

  • جأنا{\displaystyle c_{i}}هو بايتأنا{\displaystyle i}من الملف،
  • ح(ن){\displaystyle H(n)}هي "قيمة تجزئة" تتكون من أدنى 12 بت من مجموع 8196 بايت متتالي تنتهي بالبايتن{\displaystyle n}.

تتضمن عملية إزاحة النافذة بمقدار بايت واحد ببساطة إضافة الحرف الجديد إلى المجموع وطرح أقدم حرف (الذي لم يعد موجودًا في النافذة) من المجموع. وبفضل خصائص حساب باقي القسمة، فإن المساحة التخزينية المطلوبة لا تتجاوز 12 بت.

لكلن{\displaystyle n}أينح(ن)==0{\displaystyle H(n)==0}تقوم هذه البرامج بتقسيم الملف بينن{\displaystyle n}ون+1{\displaystyle n+1}.

FastCDC

يُحسّن FastCDC خوارزمية CDC القائمة على Gear [ 7 ] بشكل أساسي بإضافة حلقة "بدء التشغيل" للبايتات التي تسبق الحجم الأدنى المطلوب. ومن خلال تخطي فحص القطع، يتحسن الأداء، كما تُضاف ميزة تسمح بالتحكم في الحجم الأدنى. [ 8 ] تُضاعف هذه الخوارزمية الجديدة السرعة تقريبًا مقارنةً بخوارزمية Gear القديمة، وهي أسرع بعشر مرات من خوارزمية CDC القائمة على Rabin. [ 15 ]

يتم توفير الشفرة الزائفة للنسخة الأساسية على النحو التالي:

مدخلات خوارزمية FastCDC : مصدر مخزن البيانات ، طول البيانات n ، الناتج: نقطة القطع iMinSize  2 كيلوبايت // الحد الأدنى لحجم الجزء المُقسّم هو 2 كيلوبايت MaxSize  64 كيلوبايت // الحد الأقصى لحجم الجزء المُقسّم هو 64 كيلوبايت Mask 0x0000d93003530000 // تم ضبط 13 بت -> الحجم المتوسط ​​المطلوب هو 2^13 بايت = 8 كيلوبايت fp 0 // uint64 i 0 // حجم المخزن المؤقت أقل من الحد الأدنى لحجم القطعة إذا كان nMinSize، فأرجع n . إذا كان nMaxSize، فأرجع n MaxSize. // تخطَّ أول 16 بايت من MinSize ، وابدأ عملية التجزئة     بينما i < MinSize do fp  ( fp << 1 ) + Gear [ src [ i ]] i i + 1     بينما i < نفّذ ما يلي: fp  ( fp << 1) + Gear [ src [ i ]] ، إذا لم يكن fp & Mask موجودًا ، فأرجع i ، i i + 1     أعد i

حيث يكون مصفوفة التروس مكافئة للجدول s أعلاه.

يستخدم إصدار متقدم قناعين مختلفين مشتقين من القناع المذكور أعلاه ، أحدهما يحتوي على 15 بتًا مضبوطًا والآخر على 11 بتًا مضبوطًا. يُستخدم الأول عندما يكون حجم البيانات (i) أقل من 8 كيلوبايت؛ وبعد ذلك يُستخدم الثاني. يؤدي هذا إلى تضييق نطاق توزيع حجم البيانات حول المتوسط ​​المطلوب وتحسين عملية إزالة البيانات المكررة. [ 8 ]

التعقيد الحسابي

يمكن حساب جميع دوال التجزئة المتدحرجة في وقت خطي لعدد الأحرف، وتحديثها في وقت ثابت عند إزاحة الأحرف بمقدار موضع واحد. على وجه الخصوص، حساب تجزئة رابين-كارب المتدحرجة لسلسلة طولهاك{\displaystyle k}يتطلبيا(ك){\displaystyle O(k)}تتطلب عمليات الحساب النمطي والتجزئة باستخدام كثيرات الحدود الدوريةيا(ك){\displaystyle O(k)}عمليات XOR الثنائية وعمليات الإزاحة الدائرية . [ 1 ]

انظر أيضاً

مراجع

  1. 1 2 3 دانيال ليمير، أوين كاسر: التجزئة المتكررة لـ n -gram مستقلة بشكل ثنائي، في أفضل الأحوال، كلام الحاسوب واللغة 24 (4)، الصفحات 698-710، 2010. arXiv:0705.4676 .
  2. بصمات الأصابع باستخدام كثيرات الحدود العشوائية. رابين، م. (1981)
  3. "المراجع — وثائق restic 0.9.0" . restic.readthedocs.io . تم ​​الاطلاع عليه بتاريخ 24-05-2018 .
  4. 1 2 3 4 كوهين، جوناثان د. (يوليو 1997). "دوال التجزئة المتكررة لـ n-grams". معاملات ACM لأنظمة المعلومات . 15 (3): 291-320 . doi : 10.1145/256163.256168 .
  5. ^ أوزجاليس، روبرت (1995). "بوز هاش" .
  6. "الوثائق: تمت إضافة بعض الأفكار بواسطة "Voltara"، وإصلاح المشكلة رقم 903 · ThomasWaldmann/borg@ec93073" . GitHub .
  7. 1 2 3 4 شيا، وين؛ جيانغ، هونغ؛ فنغ، دان؛ تيان، لي؛ فو، مين؛ تشو، يوكون (سبتمبر 2014). "Ddelta: نهج ضغط دلتا سريع مستوحى من إزالة التكرار". تقييم الأداء . 79 : 258-272 . doi : 10.1016/j.peva.2014.07.016 .
  8. 1 2 3 4 شيا، وين؛ تشو، يوكون؛ جيانغ، هونغ؛ فنغ، دان؛ هوا، يو؛ هو، يوتشونغ؛ ليو، تشينغ؛ تشانغ، يوتشنغ (2016). FastCDC: منهج سريع وفعال لتقسيم البيانات إلى أجزاء محددة المحتوى لإزالة البيانات المكررة . المؤتمر التقني السنوي لجمعية USENIX لعام 2016 (ATC '16). جمعية USENIX. ISBN 9781931971300تم الاطلاع عليه بتاريخ 24 يوليو 2020 .
  9. 1 2 3 "الأساس - تقديم تجزئة المحتوى المحددة (CDC)" . 2015.
  10. 1 2 هورفاث، آدم (24 أكتوبر 2012). "تجزئة رابين كارب المتداولة - أجزاء ذات حجم ديناميكي تعتمد على المحتوى المجزأ" .
  11. ١ ٢ ٣ "هياكل البيانات وتنسيقات الملفات - وثائق Borg - برنامج الأرشفة لإزالة التكرارات 1.1.5" . borgbackup.readthedocs.io . تم ​​الاطلاع عليه بتاريخ ٢٤ مايو ٢٠١٨ .
  12. 1 2 "خوارزمية Rsyncrypto" .
  13. ^ والدمان ، توماس. "مستندات بورغ: رؤى / مناقشة Buzhash" . جيثب .
  14. ليب دو تويت، ج. "مقدمة في تجزئة المحتوى المحددة" . joshleeb.com .
  15. ^ شيا ون؛ زو، شيانغيو؛ جيانغ، هونغ؛ تشو، يوكون؛ ليو، تشوانيي؛ فنغ ، دان. هوا، يو؛ هو، يوتشونغ؛ تشانغ ، يوتشنغ (2020-06-16). “تصميم التقطيع السريع المحدد للمحتوى لأنظمة التخزين القائمة على إلغاء البيانات المكررة”. معاملات IEEE على الأنظمة المتوازية والموزعة . 31 (9): 2017– 2031. بيب كود : 2020ITPDS..31.2017X . دوى : 10.1109/TPDS.2020.2984632 . S2CID 215817722 .